由于一台mysql数据库服务器上有多个数据库,所以在考虑备份的时候也将多个库分开进行,以便在单个库出现问题时恢复。
一、分库备份
1、可以一个库对应一条备份语句,如:
mysqldump -S /home/mysql/run/mysql.socket -uroot -p123456 --single-transaction --master-data=2 -F -B db1 |gzip > /home/mysql/bakup/db1.sql.gz
mysqldump -S /home/mysql/run/mysql.socket -uroot -p123456 --single-transaction --master-data=2 -F -B db2 |gzip > /home/mysql/bakup/db2.sql.gz
......
2、一条语句分开
for DBNAME in `mysql -uroot -p123456 -e "show databases;"|grep -Evi database|infor|perfor"`
do
mysqldump -S /home/mysql/run/mysql.socket -uroot -p123456 --single-transaction --master-data=2 -F -B $DBNAME |gzip > /home/mysql/bakup/$DBNAME.sql.gz
done
二、分库恢复
1、所有库恢复时
<pre name="code" class="html">gzip -d /home/mysql/bakup/*.gz
for DBNAME in `ls /homoe/mysql/bakup |sed 's#.sql##g'`
do
mysql -uroot -p123456 < /home/mysql/bakup/$DBNAME.sql
done
2、从备份恢复指定库时,指定相应的备份文件即可
gzip -d /home/mysql/bakup/db1.sql.gz
mysql -uroot -p123456 < /home/mysql/bakup/db1.sql
但是二进制日志是记录所有库的操作,所以要指定相应库的恢复,使用mysqlbinlog的-d参数指定要恢复的数据库,即可增量恢复指定库
mysqlbinlog -d db1 /home/mysql/data/mysql.bin-000045 |mysql -S /home/mysql/run/mysql.socket -uroot -p123456
说明:socket文件不是默认位置,所以所有命令需要添加-S参数,但mysql例外,已经在.bashrc中添加alias mysql='mysql -S /home/mysql/run/mysql.socket'
当然其他命令也可以添加。