前一段时间,开发人员不小心在delete的时候忘了加条件,把一张表的全部数据给删了.
以下是模拟的恢复操作记录:
--os rhel 5.6 x64
--mysql version 5.6.14
---------------原DB
1.把最新一次的完全备份(innobackupex全备)及备份作业日志複製到一台mysql测试机
[root@selectshen full]#scp /u03/mysqlbackup/full/lfcmysql01_2015_02_26* root@123.0.0.101 :/u03/
2.把最新一次完全备份后产生的binlog複製到测试机
[root@selectshen full]#scp /u03/mysqldata/lfc01.000014 root@ 123.0.0.101 :/u03/
3.把当前的my.cnf文件複製到测试机
[root@selectshen full]#scp /usr/my.cnf root@ 123.0.0.101 :/u03/
----------------测试DB
4.解压完全备份
[root@selectshen u03]# mkdir restore
[root@selectshen u03]# mv lfcmysql01_2015_02_26.tar.gz /u03/restore/
[root@selectshen u03]# cd restore/
[root@selectshen restore]# ls
lfcmysql01_2015_02_26.tar.gz
[root@selectshen restore]# tar -xizf lfcmysql01_2015_02_26.tar.gz
[root@selectshen restore]# ls
backup-my.cnf mysql test xtrabackup_logfile
sdata performance_schema xtrabackup_binary
tsdata ftsdata xtrabackup_binlog_info
ibdata1 lfcmysql01_2015_02_26.tar.gz xtrabackup_checkpoints
[root@selectshen restore]# mv lfcmysql01_2015_02_26.tar.gz ../
4.根据my.cnf移动文件并开启数据库
[root@selectshen restore]# cd ..
[root@selectshen u03]# mv my.cnf /usr/my.cnf
[root@selectshen u03]# cd restore
[root@selectshen restore]# mv * /u02/mysqldata/
[root@selectshen restore]# cd /u02/mysqldata/
[root@selectshen mysqldata]# chown -R mysql.mysql *
[root@selectshen mysqldata]# service mysql start
Starting MySQL................... [ OK ]
5.通过mysqlbinlog binlog把数据库恢复到删除前
[root@selectshen restore]# cd /u02/mysqldata/
--查看全备结束时binlog的position
[root@selectshen mysqldata]# cat xtrabackup_binlog_info
lfc01.000014 449091457
[root@selectshen mysqldata]# cd /u03
--导出binlog,查找delete语句的binlog position,此处用-v是因为binlog的格式是row.
定位的时候可根据大概的时间点区间(start-datetime&stop-datetime),缩小查找的日志量.
[root@selectshen u03]# mysqlbinlog lfc01.000014 -d ftsdata -v --start-position=449091457>a.txt
--这一步如果有报
ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary log', data_len: 234, event_type: 546
Could not read entry at offset 5645353:Error in log format or read error
不一定是你的mysqlbinlog版本有问题,也有可能是你指定的binlog的start-position值有问题。
--查找a.txt中执行delete from tb的position # at 449120400
--执行恢复日志到数据库
[root@selectshen u03]# mysqlbinlog lfc01.000014 -d ftsdata --start-position=449091457 --stop-position=449120400 |mysql -uroot -p
6.恢复完成,把要还原的表数据dump出来,然后导入到原DB.
PS:percona xtrabackup 安装及自动备份在博文 mysql for linux 安装中 http://blog.itpub.net/28539951/viewspace-1309652/
以下是模拟的恢复操作记录:
--os rhel 5.6 x64
--mysql version 5.6.14
---------------原DB
1.把最新一次的完全备份(innobackupex全备)及备份作业日志複製到一台mysql测试机
[root@selectshen full]#scp /u03/mysqlbackup/full/lfcmysql01_2015_02_26* root@123.0.0.101 :/u03/
2.把最新一次完全备份后产生的binlog複製到测试机
[root@selectshen full]#scp /u03/mysqldata/lfc01.000014 root@ 123.0.0.101 :/u03/
3.把当前的my.cnf文件複製到测试机
[root@selectshen full]#scp /usr/my.cnf root@ 123.0.0.101 :/u03/
----------------测试DB
4.解压完全备份
[root@selectshen u03]# mkdir restore
[root@selectshen u03]# mv lfcmysql01_2015_02_26.tar.gz /u03/restore/
[root@selectshen u03]# cd restore/
[root@selectshen restore]# ls
lfcmysql01_2015_02_26.tar.gz
[root@selectshen restore]# tar -xizf lfcmysql01_2015_02_26.tar.gz
[root@selectshen restore]# ls
backup-my.cnf mysql test xtrabackup_logfile
sdata performance_schema xtrabackup_binary
tsdata ftsdata xtrabackup_binlog_info
ibdata1 lfcmysql01_2015_02_26.tar.gz xtrabackup_checkpoints
[root@selectshen restore]# mv lfcmysql01_2015_02_26.tar.gz ../
4.根据my.cnf移动文件并开启数据库
[root@selectshen restore]# cd ..
[root@selectshen u03]# mv my.cnf /usr/my.cnf
[root@selectshen u03]# cd restore
[root@selectshen restore]# mv * /u02/mysqldata/
[root@selectshen restore]# cd /u02/mysqldata/
[root@selectshen mysqldata]# chown -R mysql.mysql *
[root@selectshen mysqldata]# service mysql start
Starting MySQL................... [ OK ]
5.通过mysqlbinlog binlog把数据库恢复到删除前
[root@selectshen restore]# cd /u02/mysqldata/
--查看全备结束时binlog的position
[root@selectshen mysqldata]# cat xtrabackup_binlog_info
lfc01.000014 449091457
[root@selectshen mysqldata]# cd /u03
--导出binlog,查找delete语句的binlog position,此处用-v是因为binlog的格式是row.
定位的时候可根据大概的时间点区间(start-datetime&stop-datetime),缩小查找的日志量.
[root@selectshen u03]# mysqlbinlog lfc01.000014 -d ftsdata -v --start-position=449091457>a.txt
--这一步如果有报
ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary log', data_len: 234, event_type: 546
Could not read entry at offset 5645353:Error in log format or read error
不一定是你的mysqlbinlog版本有问题,也有可能是你指定的binlog的start-position值有问题。
--查找a.txt中执行delete from tb的position # at 449120400
--执行恢复日志到数据库
[root@selectshen u03]# mysqlbinlog lfc01.000014 -d ftsdata --start-position=449091457 --stop-position=449120400 |mysql -uroot -p
6.恢复完成,把要还原的表数据dump出来,然后导入到原DB.
PS:percona xtrabackup 安装及自动备份在博文 mysql for linux 安装中 http://blog.itpub.net/28539951/viewspace-1309652/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28539951/viewspace-1442270/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28539951/viewspace-1442270/