一般恢复
[root@localhost ~]# mysql -u root a < /root/a_t1_2019-07-23.sql //先执行完整恢复 [root@localhost ~]# mysql -u root -e 'select * from a.t1;' +------+ | id | +------+ | 1 | | 2 | | 3 | +------+ //查看表中内容已经恢复出了三条数据 [root@localhost ~]# cd /usr/local/mysql //进入存放二进制文件的目录 [root@localhost mysql]# mysqlbinlog --no-defaults mysql-bin.000002 | mysql -u root //使用第二个二进制文件恢复数据(因为4、5、6数据存放在第二个二进制文件中) [root@localhost mysql]# mysql -u root -e 'select * from a.t1;' +------+ | id | +------+ | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | +------+ //再次查看已经恢复完成!基于位置恢复
[root@localhost mysql]# mysql -u root -e 'drop table a.t1;' //删除a.t1表本身 [root@localhost mysql]# mysql -u root -e 'select * from a.t1;' ERROR 1146 (42S02) at line 1: Table 'a.t1' doesn't exist //查看表确实不存在 [root@localhost mysql]# mysql -u root a < /root/a_t1_2019-07-23.sql //先执行完整恢复 [root@localhost mysql]# mysqlbinlog --no-defaults mysql-bin.000003 //使用mysqlbinlog工具查看第三个二进制文件(第三个文件中包含删除的操作) ……………… //省略部分内容,找到删除语句 # at 780 //操作ID #190723 18:24:51 server id 1 end_log_pos 863 CRC32 0x46540b40 Query thread_id=12 exec_time=0 error_code=0 SET TIMESTAMP=1563877491/*!*/; delete from a.t1 …………………… //省略部分内容,二进制文件中内容太多,耐心寻找 [root@localhost mysql]# mysqlbinlog --no-defaults --stop-position='780' mysql-bin.000003 | mysql -u root //恢复删除之前的数据 [root@localhost mysql]# mysql -u root -e 'select * from a.t1;' +------+ | id | +------+ | 1 | | 2 | | 3 | | 7 | | 8 | | 9 | +------+基于时间点的恢复
[root@localhost mysql]# mysql -u root -e 'drop table a.t1;' //删除a.t1表本身 [root@localhost mysql]# mysql -u root -e 'select * from a.t1;' ERROR 1146 (42S02) at line 1: Table 'a.t1' doesn't exist //查看表确实不存在 [root@localhost mysql]# mysql -u root a < /root/a_t1_2019-07-23.sql //先执行完整恢复 [root@localhost mysql]# mysqlbinlog --no-defaults mysql-bin.000003 //使用mysqlbinlog工具查看第三个二进制文件(第三个文件中包含删除的操作) ………… //省略部分内容 # at 388 #190723 18:24:33 server id 1 end_log_pos 481 CRC32 0x3861b619 Query thread_id=10 exec_time=0 error_code=0 //找到插入数据8的记录,记住时间 SET TIMESTAMP=1563877473/*!*/; insert into a.t1 values(8) /*!*/; # at 481 #190723 18:24:33 server id 1 end_log_pos 512 CRC32 0xa7550b63 Xid = 57 COMMIT/*!*/; # at 512 #190723 18:24:37 server id 1 end_log_pos 584 CRC32 0xd9c5c9a4 Query thread_id=11 exec_time=0 error_code=0 SET TIMESTAMP=1563877477/*!*/; BEGIN /*!*/; # at 584 #190723 18:24:37 server id 1 end_log_pos 677 CRC32 0xf15c7ff8 Query thread_id=11 exec_time=0 error_code=0 //找到插入数据9的记录,记住时间 SET TIMESTAMP=1563877477/*!*/; insert into a.t1 values(9) /*!*/; 现在只恢复数据8 [root@localhost mysql]# mysqlbinlog --no-defaults --start-datetime='2019-07-23 18:24:33' --stop-datetime='2019-07-23 18:24:37' mysql-bin.000003 | mysql -u root //开始时间和结束时间没写错,恢复就没有问题,注意格式 [root@localhost mysql]# mysql -u root -e 'select * from a.t1;' +------+ | id | +------+ | 1 | | 2 | | 3 | | 8 | +------+ //再次查看数据8已经恢复不管使用增量恢复哪种方式恢复,都必须先恢复完整恢复!!!