备份

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