备份
shell> mysqldump --single-transaction --flush-logs --master-data=2 \
--all-databases --delete-master-logs > backup_sunday_1_PM.sql
--single-transaction 使用事务在线备份
--flush-logs 在备份时开启新的bin log文件,这样保证从备份这一时刻起,所有的改动都被记录在新的bin log文件中
--master-data=2 将新开启的bin log文件名等信息作为注释写入备份文件中
--all-databases 备份全部数据库
--delete-master-logs 备份后删除没用的bin log
恢复
首先,找一个最近的全量备份进行恢复
shell> mysql < backup_sunday_1_PM.sql
然后,应用自全量备份后的bin log来重现最近的修改
shell> mysqlbinlog gbichot2-bin.000007 gbichot2-bin.000008 | mysql
如果需要会恢复的操作是在一个bin log中,或者需要放弃bin log中的一些sql语句(例如drop table xxx),那么就需要对bin log进行恢复的过程精确的控制
方法1,编辑mysqlbinlog恢复出的sql语句
方法2,基于时间点恢复,需要考虑恢复到特定时间点,并跳过一个时间范围,然后继续
shell> mysqlbinlog --stop-datetime="2005-04-20 9:59:59" \
/var/log/mysql/bin.123456 | mysql -u root -p
shell> mysqlbinlog --start-datetime="2005-04-20 10:01:00" \
/var/log/mysql/bin.123456 | mysql -u root -p
方法3,基于log event id,一般需要先将一段特定时间范围内的bin log解析成sql
shell> mysqlbinlog --start-datetime="2005-04-20 9:55:00" \
--stop-datetime="2005-04-20 10:05:00" \
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
然后找到需要忽略的sql
shell> mysqlbinlog --stop-position=368312 /var/log/mysql/bin.123456 \
| mysql -u root -p
shell> mysqlbinlog --start-position=368315 /var/log/mysql/bin.123456 \
| mysql -u root -p7 Backup and Recoverydev.mysql.com