mysql 分表脚本_分享一个MySQL分库分表备份脚本(原)

分享一个MySQL分库备份脚本(原)

开发思路:

1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上时间方便整理

2.取数据库:抓取数据库名称,我用的awk和grep配合取数据库的名称(如果想按照表备份可以再细化一下)注意要用mysql -e选项 这样才能做成脚本

3.系统环境变量:因为用到了函数,所以非系统内置的命令 最好在脚本里面用 . /etc/profile  把系统当前的环境变量传过来

4.实现方法:用mysqldump 命令+for 循环实现分库备份

5.备份检查:如果备份出来的文件存在大小不为0 则认定为成功,返回success ,否则failed,如果放在定时任务执行 建议输出到日志文件里面,方便日后查看

6.注意定义变量的时候 单引号‘’和双引号“”的区别,否则会有错误

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

想和大家重点分享的是开发的思路,技术很基础。

经过测试可以完成,如果有错误,欢迎指正。

ps 附上分表备份的脚本供参考

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值