分享一个MySQL分库备份脚本(原)
开发思路:1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上时间方便整理
2.取数据库:抓取数据库名称,我用的awk和grep配合取数据库的名称(如果想按照表备份可以再细化一下)注意要用mysql -e选项 这样才能做成脚本
3.系统环境变量:因为用到了函数,所以非系统内置的命令 最好在脚本里面用 . /etc/profile 把系统当前的环境变量传过来
4.实现方法:用mysqldump 命令+for 循环实现分库备份
5.备份检查:如果备份出来的文件存在大小不为0 则认定为成功,返回success ,否则failed,如果放在定时任务执行 建议输出到日志文件里面,方便日后查看
6.注意定义变量的时候 单引号‘’和双引号“”的区别,否则会有错误
1 #!/bin/bash 2 #define var 3 user="root" 4 pass="1314520" 5 path="/mysql/backup" 6 cmd="mysql -u${user} -p${pass}" 7 dump="mysqldump -u${user} -p${pass} -B --events -x --master-data=2" 8 #system function 9 . /etc/init.d/functions10 . /etc/profile11 #judge dir12 function jdir(){13 if [ ! -e $path ];then14 mkdir $path -p15 fi16 }17 #dump database18 function bk(){19 for dbname in `$cmd -e 'show databases;'|awk 'NR>1{print $0}'|grep -v "performance_schema"`20 do21 $dump $dbname|gzip >${path}/${dbname}_$(date +%F).sql.gz22 sleep 123 if [ -s ${path}/${dbname}_$(date +%F).sql.gz ];then24 action "dump $dbname success!" /bin/true25 else26 action "dump $dbname failed" /bin/false27 fi28 done 29 }30 function main(){31 jdir32 bk33 }34 main
想和大家重点分享的是开发的思路,技术很基础。
经过测试可以完成,如果有错误,欢迎指正。
ps 附上分表备份的脚本供参考
1 #!/bin/bash 2 #define var 3 user="root" 4 pass="1314520" 5 path="/mysql/backup" 6 cmd="mysql -u${user} -p${pass}" 7 dump="mysqldump -u${user} -p${pass} --events -x --master-data=2" 8 #system function 9 . /etc/init.d/functions10 . /etc/profile11 #judge dir12 function jdir(){13 if [ ! -e $path ];then14 mkdir $path -p15 fi16 }17 #dump database18 function bk(){19 for dbname in `$cmd -e 'show databases;'|awk 'NR>1{print $0}'|grep -v "performance_schema"`20 do21 for tname in `$cmd -e "show tables from ${dbname}"|sed "1d"`22 do23 $dump $dbname $tname|gzip >${path}/${dbname}_${tname}_$(date +%F).sql.gz24 25 if [ -e ${path}/${dbname}_${tname}_$(date +%F).sql.gz ];then26 echo "${dbname}_${tname}" >>$path/mysql_table.log27 28 fi29 done30 done31 }32 function main(){33 jdir34 bk35 }36 main