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
到這裏,就表示腳本成功執行了