MySQL 利用二进制文件还原数据库

  • 查看二进制文件是否开启
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)

 

你可能感兴趣的:(MySQL 利用二进制文件还原数据库)