實現MySQL分庫分表備份的腳本


1)準備測試數據:經過寫腳本批量建庫建表並插入測試數據。
mysql

[root@aliyun scripts]# cat ceshi.sh sql

#/bin/bash數據庫

PATH="/usr/local/mysql/bin:$PATH"                 #定義mysql命令所在路徑bash

MYUSER=root                                                     #定義數據用戶名ide

DBPATH=/server/backup                                    #定義數據備份目錄測試

MYPASS=xiwei1995                                             #定義數據用戶密碼spa

SOCKET=/tmp/mysql.sock                                  #定義數據庫sock文件,多實例的指定對應路徑orm

MYCMD="mysql -u$MYUSER -p$MYPASS "      #定義登陸數據庫的命令server

for dbname in test2 test3 test4 test5ip

  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)使用腳本查看測試數據結果:

[root@aliyun 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


查看結果以下:

[root@aliyun 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分庫分表的腳本

[root@aliyun 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


執行腳本結果以下:

[root@aliyun scripts]# rm -f /server/backup/*

[root@aliyun scripts]# sh backMySQL.sh

[root@aliyun 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


到這裏,就表示腳本成功執行了

相關文章
相關標籤/搜索