- 查看二进制文件是否开启
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
- 确认开启之后,进行一些正常操作
CREATE DATABASE test01;
USE test01;
CREATE TABLE table01(
id int primary key auto_increment,
name varchar(32) not null default ''
);
INSERT INTO table01(name) VALUES('a');
INSERT INTO table01(name) VALUES('b');
INSERT INTO table01(name) VALUES('c');
- 接下来进行一次“误操作”
drop database test01;
- 进入 mysql 目录,找到形如 mysql-bin.000005 文件,选择后缀最大的文件,一般后缀越大越新,执行命令
mysqlbinlog mysql-bin.000005
- 在输出的信息中找到最后一些重要信息
#190823 7:49:34 server id 1 end_log_pos 1008 Query thread_id=4 exec_time=0 error_code=0
SET TIMESTAMP=1566517774/*!*/;
INSERT INTO table01(name) VALUES('c')
/*!*/;
# at 1008
#190823 7:49:34 server id 1 end_log_pos 1035 Xid = 32
COMMIT/*!*/;
# at 1035
#190823 7:52:31 server id 1 end_log_pos 1120 Query thread_id=4 exec_time=0 error_code=0
SET TIMESTAMP=1566517951/*!*/;
drop database test01
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
- 利用 drop database test01 前的操作“时间”或者“position”进行恢复
mysqlbinlog --stop-datetime="2019-08-23 7:49:34" mysql-bin.000005 | mysql -uroot -p
注意:stop-datetime 时间格式貌似只能这样写,使用譬如 190823 7:49:32 提示参数值不正确。
mysqlbinlog --stop-position="1035" mysql-bin.000005 | mysql -uroot -p
注意:使用 mysqlbinlog 恢复之后,日志文件会重复记录前面的操作,此时可以重置日志文件
mysql> reset master
这时,再查看二进制文件,发现已经重置了
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 107 |
+------------------+-----------+
1 row in set (0.00 sec)