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
  • 相关阅读:
    4.VS2010C++建立DLL工程
    C++-教程2-VS2010C++相关文件说明
    C++-教程1-VS2010环境设置
    Android实例-实现扫描二维码并生成二维码(XE8+小米5)
    C++-教程3-VS2010C++各种后缀说明
    Android问题-No resource found that matches the given name (at 'theme' with value '@style/CaptureTheme').
    Android问题-新电脑新系统WIN764位上安装简版本的XE8提示“Unit not found: 'System'”
    启动程序的同时传参给接收程序(XE8+WIN764)
    Android实例-程序切换到后台及从后台切换到前台
    Unity向量投影使用
  • 原文地址:https://www.cnblogs.com/zhangkeyu/p/6657752.html
Copyright © 2011-2022 走看看