三十、分库分表备份脚本

1、拼接分库备份语句

#取出库名列表
$ mysql -uroot -p123 -e "show databases;"|egrep -v "_schema|atabase"
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql
school
sys
test

#拼接备份语句
$ mysql -uroot -p123 
-e "show databases;"|egrep -v "_schema|atabase"| sed -r 's#^(.*)#mysqldump -uroot -p123 -B 1|gzip >/backup/1.sql.gz#g' |bash

2、分库备份脚本

#!/bin/sh
#定义mysql登录账号,密码,SOKET文件
USER=root
PASSWD=123
SOCKET=/tmp/mysql.sock

#定义备份路径
BACKPATH=/backup/

#定义登录语句
LOGIN="mysql -u$USER -p$PASSWD -S $SOCKET"

#定义取出库名变量
DBLIST=$($LOGIN -e "show databases;"|egrep -v "_schema|atabase")

#定义mysqldump备份语句
MYDUMP="mysqldump -u$USER -p$PASSWD -S $SOCKET -B -F -R"

#判断备份目录是否存在
[ ! -d $BACKPATH ] && mkdir -p $BACKPATH

#循环取出库名进行分库备份
for dbname in $DBLIST
do
	$MYDUMP $dbname | gzip > /backup/${dbname}_$(date +%F).sql.gz
done

3、分表备份脚本

#!/bin/sh
#定义mysql登录账号,密码,SOKET文件
USER=root
PASSWD=123
SOCKET=/tmp/mysql.sock

#定义登录语句
LOGIN="mysql -u$USER -p$PASSWD -S $SOCKET"

#定义取出库名变量
DATABASES=$($LOGIN -e "show databases;"|egrep -v "_schema|atabase")

#定义mysqlMYDUMP备份语句,注意备份表不能加-B
MYDUMP="mysqldump -u$USER -p$PASSWD -S $SOCKET -x -F -R"

#循环取出库名进行备份
for dbname in $DATABASES
do
	#定义取表名,sed '1d'删除第一行
	TABLES=$($LOGIN -e "use $dbname;show tables;"|sed '1d')
        #循环取出表名进行备份
	for table in $TABLES
	do
	#判断是否存在/backup/$dbname目录
		[ ! -d /backup/$dbname ] && mkdir /backup/$dbname -p
			$MYDUMP $dbname $table | gzip > /backup/$dbname/${dbname}_${table}_$(date +%F).sql.gz

	done
done


学习来自:
《MYSQL入门与提高实践》P133
《MYSQL入门与提高实践》P164