• 分享一个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
  • 相关阅读:
    ps中的一些方法
    extjs 横向滚动条 和 本地排序
    JS JSON.parse() 和 JSON.stringify()
    SQL 同一个表中 根据一列更新另一列(不同行)
    extjs2.2 panel加背景色
    extjs2.2 combo的监听
    ExtJS2.2 form表单提交时不提交emptyText
    Extjs 复制对象
    Extjs 显示或隐藏滚动条
    Extjs2.2 开始时间,结束时间,工期 联动(选二补一),包含日期,天数的互转
  • 原文地址:https://www.cnblogs.com/dragonflyer/p/6219452.html
Copyright © 2020-2023  润新知