恢复的时间点,然后再利用二进制日志恢复到指定的时间点
Mysqlbinlog工具可以用来解析二进制日志的内容,让日志可以被执行或者是查看
在数据库中重新执行某个二进制日志文件中的内容,可以使用如下命令
1 2 3 4 5
shell> mysqlbinlog binlog_files | mysql -u root -p shell> mysqlbinlog binlog.000001 binlog.000002 | mysql -u root -p 或者是先把日志文件内容解析出来,然后再执行 shell> mysqlbinlog binlog_files > tmpfile shell> mysql -u root -p < tmpfile
模拟数据测试基于时间点恢复:
1 2 3 4 5 6 7 8 9 10 11 12 13
mysql> use course; mysql> delte from students; mysql> alter table students add tstamp timestamp; mysql> flush logs; #刷新一下二进制日志,新生成一个二进制日志 #插入数据 ,flush logs新生成一个二进制文件 mysql> insert into students(sid,sname,gender,dept_id) values(1,'a',1,1),(2,'b',2,2); mysql> flush logs; mysql> insert into students(sid,sname,gender,dept_id) values(3,'c',3,3),(4,'d',4,3); mysql> flush logs; mysql> insert into students(sid,sname,gender,dept_id) values(5,'e',5,3),(6,'f',6,3); mysql> flush logs; mysql> select * from students;
删除表里全部数据,进行模拟恢复
第一个的flush logs的时候alter table
插入a,b的那次数据的二进制日志文件
恢复第一个二进制日志文件:插入a,b
1 2 3 4 5 6 7
mysql> truncate table students; ##先删除表里的全部数据 mysql> desc students; 恢复第一个二进制日志文件:插入a,b 可以通过mysqlbinlog 查询一下二进制文件看看里面的具体内容 [root@master01 data]# mysql -u root -p < /tmp/mysqlbinlog46.sql
恢复第二个二进制日志文件:
1 2 3
[root@master01 data]# mysqlbinlog -v mysql-bin.000047 > /tmp/mysqlbinlog47.sql [root@master01 data]# mysql -u root -p < /tmp/mysqlbinlog47.sql Enter password:
如果是恢复某个日志文件中的一部分内容,可以通过指定—start-datetime或者是—stop-datetime参数来确定开始恢复时间和停止恢复时间
比如将数据库恢复到2018-09-19 19:06:08的时刻:
涉及到mysql-bin.000048文件内容
1 2
[root@master01 data]# mysqlbinlog -v --stop-datetime="2018-09-19 19:06:46" mysql-bin.000048 | mysql -u root -p Enter password:
基于时间点的恢复也可以指定日志文件中的位置,通过设置–start-position和–stop-position两个参数
1 2 3
mysql> truncate table students; mysql> select * from students; Empty set (0.00 sec)
看一下二进制的具体内容
从一个完整的日志位置恢复 或则commit 提交以后–stop-position位置恢复