zoukankan      html  css  js  c++  java
  • 分享一个MySQL分库分表备份脚本(原)

    分享一个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/functions
    10 . /etc/profile
    11 #judge dir
    12 function jdir(){
    13 if [ ! -e $path ];then
    14   mkdir $path -p
    15 fi
    16 }
    17 #dump database
    18 function bk(){
    19 for dbname in `$cmd -e 'show databases;'|awk 'NR>1{print $0}'|grep -v "performance_schema"`
    20 do
    21   $dump $dbname|gzip >${path}/${dbname}_$(date +%F).sql.gz
    22   sleep 1
    23   if [ -s ${path}/${dbname}_$(date +%F).sql.gz ];then
    24      action "dump $dbname success!" /bin/true
    25   else
    26      action "dump $dbname failed" /bin/false
    27   fi
    28 done
    29 } 30 function main(){ 31 jdir 32 bk 33 } 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/functions
    10 . /etc/profile
    11 #judge dir
    12 function jdir(){
    13 if [ ! -e $path ];then
    14   mkdir $path -p
    15 fi
    16 }
    17 #dump database
    18 function bk(){
    19 for dbname in `$cmd -e 'show databases;'|awk 'NR>1{print $0}'|grep -v "performance_schema"`
    20 do
    21   for tname in `$cmd -e "show tables from ${dbname}"|sed "1d"`
    22   do
    23   $dump $dbname $tname|gzip >${path}/${dbname}_${tname}_$(date +%F).sql.gz
    24    
    25   if [ -e ${path}/${dbname}_${tname}_$(date +%F).sql.gz ];then
    26      echo "${dbname}_${tname}" >>$path/mysql_table.log
    27   
    28   fi
    29   done
    30 done
    31 }
    32 function main(){
    33 jdir
    34 bk
    35 }
    36 main
  • 相关阅读:
    【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]
    【BZOJ2648】SJY摆棋子 [KD-tree]
    【BZOJ3237】【AHOI2013】连通图 [CDQ分治]
    【BZOJ1901】Dynamic Rankings [整体二分]
    【BZOJ2527】【POI2011】Meteors [整体二分]
    【BZOJ3624】【APIO2008】免费道路 [生成树][贪心]
    【BZOJ2663】灵魂宝石 [二分]
    【BZOJ4653】【NOI2016】区间 [线段树]
    【BZOJ2049】【SDOI2008】洞穴勘测 [LCT]
    【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
  • 原文地址:https://www.cnblogs.com/zhangkeyu/p/6657752.html
Copyright © 2011-2022 走看看