实现MySQL分库分表备份的脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现MySQL分库分表备份的脚本相关的知识,希望对你有一定的参考价值。


1)准备测试数据:通过写脚本批量建库建表并插入测试数据。

[[email protected] scripts]# cat ceshi.sh 

#/bin/bash

PATH="/usr/local/mysql/bin:$PATH"                 #定义mysql命令所在路径

MYUSER=root                                                     #定义数据用户名

DBPATH=/server/backup                                    #定义数据备份目录

MYPASS=xiwei1995                                             #定义数据用户密码

SOCKET=/tmp/mysql.sock                                  #定义数据库sock文件,多实例的指定对应路径

MYCMD="mysql -u$MYUSER -p$MYPASS "      #定义登录数据库的命令

for dbname in test2 test3 test4 test5

  do

   $MYCMD -e "create database $dbname"         #批量创建库

   $MYCMD -e "use $dbname;create table test(id int,name varchar(16));insert into test values(1,'testdata');"  #在这些库里面创建表test,并插入测试数据

  done


2)使用脚本查看测试数据结果:

[[email protected] scripts]# cat catceshi.sh 

#/bin/bash

PATH="/usr/local/mysql/bin:$PATH"                 #定义mysql命令所在路径

MYUSER=root                                                     #定义数据用户名

DBPATH=/server/backup                                    #定义数据备份目录

MYPASS=xiwei1995                                             #定义数据用户密码

SOCKET=/tmp/mysql.sock                                  #定义数据库sock文件,多实例的指定对应路径

MYCMD="mysql -u$MYUSER -p$MYPASS "      #定义登录数据库的命令

for dbname in test2 test3 test4 test5

  do

   echo =============${dbname}.test=============================

   $MYCMD -e "use $dbname;select * from ${dbname}.test;" #批量查看数据

done


查看结果如下:

[[email protected] scripts]# sh catceshi7.sh 

=============test2.test=============================

+------+----------+

| id   | name     |

+------+----------+

|    1 | testdata |

+------+----------+

=============test3.test=============================

+------+----------+

| id   | name     |

+------+----------+

|    1 | testdata |

+------+----------+

=============test4.test=============================

+------+----------+

| id   | name     |

+------+----------+

|    1 | testdata |

+------+----------+

=============test5.test=============================

+------+----------+

| id   | name     |

+------+----------+

|    1 | testdata |

+------+----------+


3)真正实现MySQL分库分表的脚本

[[email protected] scripts]# cat backMySQL.sh 

#/bin/bash

PATH="/usr/local/mysql/bin:$PATH"                 #定义mysql命令所在路径

MYUSER=root                                                     #定义数据用户名

DBPATH=/server/backup                                    #定义数据备份目录

MYPASS=xiwei1995                                             #定义数据用户密码

SOCKET=/tmp/mysql.sock                                  #定义数据库sock文件,多实例的指定对应路径

MYCMD="mysql -u$MYUSER -p$MYPASS "      #定义登录数据库的命令

MYDUMP="mysqldump -u$MYUSER -p$MYPASS"  #备份数据库的命令

[ ! -d "$DBPATH" ] && mkdir $DBPATH

for dbname in `$MYCMD -e "show databases;"|sed '1,2d'|egrep -v "mysql|schema"` #登录数据库获取数据库里的所有数据库名

do

     mkdir $DBPATH/${dbname}_$(date +%F) -p  #创建对应目录。

     for table in `$MYCMD -e "show tables from $dbname;"|sed '1d'` #内层循环,获取每个库里的所有表,然后进入循环。

       do

         $MYDUMP $dbname $table|gzip >$DBPATH/${dbname}_$(date +%F)/${dbname}_${table}.sql.gz  #备份指定的库内的表到指定目录下,并以库表名字命名备份的名字。

     done

done


执行脚本结果如下:

[[email protected] scripts]# rm -f /server/backup/*

[[email protected] scripts]# sh backMySQL.sh

[[email protected] scripts]# tree /server/backup/

/server/backup/

|-- test2_2018-05-12

 `-- test2_test.sql.gz

|-- test3_2018-05-12

|   `-- test3_test.sql.gz

|-- test4_2018-05-12

|   `-- test4_test.sql.gz

|-- test5_2018-05-12

|   `-- test5_test.sql.gz


到这里,就表示脚本成功执行了


以上是关于实现MySQL分库分表备份的脚本的主要内容,如果未能解决你的问题,请参考以下文章

16MySQL数据库分库分表备份脚本

mysql分库分表备份脚本

mysql分库分表备份脚本

MySQL分库分表备份脚本

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

MySQL分库备份与分表备份