- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章分享一个自动编写MySQL数据库备份脚本,值得收藏由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
其实主要是为了偷懒,所以就搞了一个自动编写MySQL数据库备份脚本,每次写备份脚本传参就可以了,仅供参考.
1. MySQL备份模板(上传到下载平台) 。
#!/bin/bash 。
################################# 。
# copyright by hwb 。
# DATE:2020-12-03 。
# 用途:MYSQL备份模板 。
################################# 。
。
#定义 。
db_host=localhost 。
db_port=3306 。
db_name=mysql_prod 。
db_user=root 。
db_pwd=password 。
backup_path="/data/backup" 。
。
# view,function,procedure,event,trigger 。
output_type='view,function,procedure,event,trigger' 。
today=`date +"%Y%m%d-%H%M%S"` 。
data_file=$backup_path/$db_name$today.sql 。
object_file="${backup_path}/obj_${db_name}$today.sql" 。
log_file="/home/scripts/mysql_backup.log" 。
mysql_cmd="mysql -u${db_user} -p${db_pwd} -h${db_host} -P${db_port} " 。
mysqldump_cmd="mysqldump -u${db_user} -p${db_pwd} -h${db_host} -P${db_port} $db_name " 。
。
。
#调用函数库 。
[ -f /etc/init.d/functions ] && source /etc/init.d/functions 。
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 。
source /etc/profile 。
。
#Require root to run this script. 。
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1 。
。
。
[ -d $backup_path ] || mkdir -p $backup_path 。
。
。
#[ ! -n "$5" ] && echo -e "\033[31m Usage: $0 IP 端口 实例名 用户名 '密码' \033[0m" && exit 1 。
。
。
function mysql_backup() 。
{ 。
echo "" 。
echo -e "\033[33m***********************************************mysql数据库备份****************************************************\033[0m" 。
。
echo -e "\033[36m**************备份数据库数据到$data_file**************\033[0m" 。
#A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events 。
$mysqldump_cmd --single_transaction -R -E --flush-logs --master-data=2 --set-gtid-purged=OFF > $data_file 。
。
if [ $? -eq 0 ];then 。
action "[$today]>>>完成数据库${db_name}数据备份" /bin/true 。
echo "[$today]>>>完成数据库${db_name}数据备份" >> ${log_file} 。
else 。
action "[$today]>>>数据库${db_name}备份失败,请检查相关配置!" /bin/false 。
echo "[$today]>>>数据库${db_name}备份失败,请检查相关配置!" >> ${log_file} 。
exit 1 。
fi 。
。
。
echo -e "\033[36m*******备份${db_name}函数、视图等定义到$object_file***********\033[0m" 。
cat > $object_file<<EOF 。
ouput object‘s definition for database "$db_name" 。
ouput time: $(date "+%Y-%m-%d %H:%M:%S") 。
ouput object type: $output_type 。
EOF 。
echo "">> $object_file 。
echo "">> $object_file 。
。
# 视图 。
if [[ $output_type == *"view"* ]] 。
then 。
echo "-- ------------------------------------------------------------" >> $object_file 。
echo "-- views" >> $object_file 。
echo "-- ------------------------------------------------------------" >> $object_file 。
#让 MySQL不输出列名 可以用-N 或者--skip-column-names参数 。
$mysql_cmd --skip-column-names \ 。
-e "select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views where table_schema='$db_name'" |\ 。
sed 's/;/\\G/g' | $mysql_cmd $db_name |\ 。
sed 's/Create View: /kk_begin\n/g' | sed 's/[ ]*character_set_client:/;\nkk_end/g' |\ 。
sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 。
fi 。
。
# 函数 。
if [[ $output_type == *"function"* ]] 。
then 。
echo "-- ------------------------------------------------------------" >> $object_file 。
echo "-- function" >> $object_file 。
echo "-- ------------------------------------------------------------" >> $object_file 。
$mysql_cmd --skip-column-names \ 。
-e "select concat('SHOW CREATE FUNCTION ',routine_schema,'.',routine_name,';') from information_schema.routines where routine_schema='$db_name' and ROUTINE_TYPE='FUNCTION'" |\ 。
sed 's/;/\\G/g' | $mysql_cmd $db_name |\ 。
sed 's/Create Function: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 。
sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 。
fi 。
。
# 存储过程 。
if [[ $output_type == *"procedure"* ]] 。
then 。
echo "-- ------------------------------------------------------------" >> $object_file 。
echo "-- procedure" >> $object_file 。
echo "-- ------------------------------------------------------------" >> $object_file 。
$mysql_cmd --skip-column-names \ 。
-e "select concat('SHOW CREATE PROCEDURE ',routine_schema,'.',routine_name,';') from information_schema.routines where routine_schema='$db_name' and ROUTINE_TYPE='PROCEDURE'" |\ 。
sed 's/;/\\G/g' | $mysql_cmd $db_name |\ 。
sed 's/Create Procedure: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 。
sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 。
fi 。
。
# 事件 。
if [[ $output_type == *"event"* ]] 。
then 。
echo "-- ------------------------------------------------------------" >> $object_file 。
echo "-- event" >> $object_file 。
echo "-- ------------------------------------------------------------" >> $object_file 。
$mysql_cmd --skip-column-names \ 。
-e "select concat('SHOW CREATE EVENT ',EVENT_SCHEMA,'.',EVENT_NAME,';') from information_schema.events where EVENT_SCHEMA='$db_name'" |\ 。
sed 's/;/\\G/g' | $mysql_cmd |\ 。
sed 's/Create Event: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 。
sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 。
fi 。
。
# 触发器 。
if [[ $output_type == *"trigger"* ]] 。
then 。
echo "-- ------------------------------------------------------------" >> $object_file 。
echo "-- trigger" >> $object_file 。
echo "-- ------------------------------------------------------------" >> $object_file 。
$mysql_cmd --skip-column-names \ 。
-e "select concat('SHOW CREATE TRIGGER ',TRIGGER_SCHEMA,'.',TRIGGER_NAME,';') from information_schema.triggers where TRIGGER_SCHEMA='$db_name';" |\ 。
sed 's/;/\\G/g' | $mysql_cmd $db_name|\ 。
sed 's/SQL Original Statement: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 。
sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 。
fi 。
。
# ^M, you need to type CTRL-V and then CTRL-M 。
sed -i "s/\^M//g" $object_file 。
。
#清理过期备份 。
find ${backup_path} -mtime +10 -type f -name '*.sql' -exec rm -f {} \; 。
。
if [ $? -eq 0 ];then 。
action "[$today]>>>完成数据库${db_name}过期备份清理" /bin/true 。
echo "[$today]>>>完成数据库${db_name}过期备份清理" >> ${log_file} 。
else 。
action "[$today]>>>数据库${db_name}过期备份清理失败,请检查相关配置!" /bin/false 。
echo "[$today]>>>数据库${db_name}过期备份清理失败,请检查相关配置!" >> ${log_file} 。
exit 1 。
fi 。
。
echo -e "\033[33m**********************************************完成${db_name}数据库备份**********************************************\033[0m" 。
cat > /tmp/mysql_backup.log << EOF 。
mysql地址:${db_host} 。
mysql端口:${db_port} 。
mysql实例名:${db_name} 。
数据备份文件:${data_file} 。
定义备份文件:${object_file} 。
EOF 。
cat /tmp/mysql_backup.log 。
echo -e "\e[1;31m 以上信息保存在/tmp/mysql_backup.log文件下 \e[0m" 。
echo -e "\033[33m*******************************************************************************************************************\033[0m" 。
echo "" 。
} 。
。
。
mysql_backup 。
2. 自动编写MySQL数据库备份脚本 。
#!/bin/bash 。
################################################################### 。
# copyright by hwb 。
# DATE: 2020-12-04 。
# 用途:自动编写MySQL备份脚本 。
################################################################### 。
。
#脚本外变量 。
mysql_path="/home/scripts" 。
script_name="mysql_backup.sh" 。
mysql_date=`date +"%Y-%m-%d-%H:%M:%S"` 。
#脚本内变量 。
db_host="localhost" 。
db_port="53306" 。
db_name="dbname" 。
db_user="root" 。
db_pwd="xxxx" 。
backup_path="/data/backup" 。
bk_backup_path=`echo $backup_path | sed 's:\/:\\\/:g'` 。
bk_db_pwd=`echo $db_pwd | sed 's:\/:\\\/:g'` 。
。
#调用函数库 。
[ -f /etc/init.d/functions ] && source /etc/init.d/functions 。
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 。
source /etc/profile 。
。
。
#root用户执行脚本 。
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1 。
。
。
#判断目录是否存在 。
[ -d $mysql_path ] || mkdir -p $mysql_path 。
[ -d $backup_path ] || echo "mysql数据库备份目录[$backup_path]不存在,请确认参数是否正确!" 。
[ -d $backup_path ] || exit 1 。
。
。
function bk_mysqlbackup(){ 。
echo "" 。
echo -e "\033[33m**************************自动配置mysql数据库备份脚本[$mysql_path/$script_name]**************************\033[0m" 。
echo "" 。
echo -e "\033[36m Usage: $0 \033[0m" 。
echo "" 。
。
[ -f $mysql_path/$script_name ] && echo "${mysql_path}已存在脚本[${script_name}],请检查相关配置!" && exit 1 。
。
wget https://app.fslgz.com/portal/api/public/fs/association/file/downLoad?uploadId=784001405093478400 -O /opt/mysql_backup_template.sh 。
mv /opt/mysql_backup_template.sh $mysql_path/$script_name 。
。
#处理windows传linux的脚本格式问题(注意空格位置不能多不能少) 。
vi +':w ++ff=unix' +':q' ${mysql_path}/${script_name} 。
。
sed -i "s/localhost/${db_host}/g" $mysql_path/$script_name 。
sed -i "s/3306/${db_port}/g" $mysql_path/$script_name 。
sed -i "s/mysql_prod/${db_name}/g" $mysql_path/$script_name 。
sed -i "s/root/${db_user}/g" $mysql_path/$script_name 。
sed -i "s/password/${bk_db_pwd}/g" $mysql_path/$script_name 。
sed -i "s#\/data\/backup#${bk_backup_path}#g" $mysql_path/$script_name 。
。
action "完成mysql备份脚本[$mysql_path/$script_name]编写!" /bin/true 。
chmod u+x $mysql_path/$script_name 。
。
#配置定时任务 。
echo "30 11 * * * /bin/bash ${mysql_path}/${script_name} " >> /var/spool/cron/root 。
。
if [ $? -eq 0 ];then 。
echo "" 。
action "[$mysql_date]>>>完成数据库备份定时任务配置" /bin/true 。
else 。
echo "" 。
action "[$mysql_date]>>>定时任务配置失败,请检查相关配置!" /bin/false 。
fi 。
。
echo "" 。
echo "|------------------------------------定时任务内容------------------------------------|" 。
crontab -l 。
echo "" 。
echo "|---------------mysql备份脚本[$mysql_path/$script_name]内容如下---------------|" 。
cat $mysql_path/$script_name 。
echo -e "\033[33m************************************完成mysql数据库备份脚本配置*****************************************\033[0m" 。
echo "" 。
} 。
。
。
bk_mysqlbackup 。
3. 基于蓝鲸平台测试自动编写备份脚本 。
测试成功.. 。
4. 测试备份的脚本是否有效 。
成功完成备份.. 。
原文地址:https://www.toutiao.com/i6902767275703845379/ 。
最后此篇关于分享一个自动编写MySQL数据库备份脚本,值得收藏的文章就讲到这里了,如果你想了解更多关于分享一个自动编写MySQL数据库备份脚本,值得收藏的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
直接上代码,可以写在公共文件common和继承的基础类中,方便调用 ?
1、php服务端环境搭建 1.php 服务端环境 安装套件 xampp(apach+mysql+php解释器) f:\mydoc文件(重要)\dl_学习\download重要资源\apache
如下所示: Eclipse快捷键 Ctrl+1 快速修复 Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
第一步:conn.PHP文件,用于连接数据库并定义接口格式,代码如下: php" id="highlighter_808731">
本篇文章整理了几道Linux下C语言的经典面试题,相信对大家更好的理解Linux下的C语言会有很大的帮助,欢迎大家探讨指正。 1、如果在Linux下使用GCC编译器执行下列程序,输出结果是什么?
安装完最新的Boost库 官方说明中有一句话: Finally, $ ./b2 install will leave Boost binaries in the lib/ subdirecto
为了梳理前面学习的《spring整合mybatis(maven+mysql)一》与《spring整合mybatis(maven+mysql)二》中的内容,准备做一个完整的示例完成一个简单的图书管理功
网站内容质量仅仅是页面综合得分里面的一项.不管算法如何改变调整,搜索引擎都不会丢弃网站页面的综合得分。 一般情况下我们把页面的综合得分为8个点: 1、标题的设置 (标题的设置要有独特性)
最近事情很忙,一个新项目赶着出来,但是很多功能都要重新做,一直在编写代码、debug。今天因为一个新程序要使用fragment来做,虽然以前也使用过fragment,不过没有仔细研究,今天顺道写篇文
Android资源命名规范 最近几个月,大量涉及android资源的相关工作。对于复杂的应用而言,资源命名的规范很有必要。除了开发人员之外,UI设计人员(或者切图相关人员)也需要对资源使用的位置非常
以前一直使用Hibernate,基本上没用过Mybatis,工作中需要做映射关系,简单的了解下Mybatis的映射。 两者相差不多都支持一对一,一对多,多对多,本章简单介绍一对一的使用以及注意点。
如下所示: ? 1
如果想在自定义的View上面显示Button 等View组件需要完成如下任务 1.在自定义View的类中覆盖父类的构造(注意是2个参数的) 复制代码 代码如下: publ
实现功能:实现表格tr拖动,并保存因为拖动改变的等级. jsp代码 ?
代码:测试类 java" id="highlighter_819000"> ?
红黑树是一种二叉平衡查找树,每个结点上有一个存储位来表示结点的颜色,可以是red或black。 红黑树具有以下性质: (1) 每个结点是红色或是黑色 (2) 根结点是黑色的 (3) 如果一个
废话不多说,直接上代码 ? 1
码代码时,有时候需要根据比较大小分别赋值: ? 1
实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天就来总结下Git的相关用法,废话不多说,直接开写。 目的:通过Git管理github托管项目代码 1、下载安装Git 1、下载
直接上代码: 复制代码 代码如下: //验证码类 class ValidateCode { private $charset = 'abcdefghkmnprstuvwxyzABC
我是一名优秀的程序员,十分优秀!