technology:mysql:mysql的binlog数据恢复

(1)MySQL的binlog就是大家经常所说的Binary Log,即bin-log,是~MySQL存储对数据库改动的二进制文件,也就是记录了所有DDL与DML(select除外)语句,利用它主要可以做两件事1)

  • 数据恢复:通过mysqlbinog工具进行恢复;
  • 数据复制:MySQL Replication在Master端开启binlog,Mster把它的二进制日志传递给slaves来达到master-slave数据一致的目的。

(2)如何查看~MySQL的日志情况(是否开启等),当~MySQL还没开启时候,通过命令:show variables like 'log_bin%'查看

  • 第一步:找到当前mysql记录的binlog文件,执行show master status;
  • 第二步:查看binlog,定位误操作的pos或者时间段。执行show binlog events in 'mysql_bin.000001';
mysql> show binlog events in 'mysql_bin.000001';
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
| mysql_bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.12-log, Binlog ver: 4 |
| mysql_bin.000001 | 123 | Previous_gtids |         1 |         154 |                                       |
| mysql_bin.000001 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
| mysql_bin.000001 | 219 | Query          |         1 |         291 | BEGIN                                 |
| mysql_bin.000001 | 291 | Table_map      |         1 |         344 | table_id: 108 (test.user)             |
| mysql_bin.000001 | 344 | Update_rows    |         1 |         650 | table_id: 108 flags: STMT_END_F       |
| mysql_bin.000001 | 650 | Xid            |         1 |         681 | COMMIT /* xid=22 */                   |
+------------------+-----+----------------+-----------+-------------+---------------------------------------+
7 rows in set
  • 第三步:进入mysql的bin目录

执行 mysqlbinlog --start-position=219 --stop-position=681 mysql-bin.000001 > e:\\update.sql将update部分单独备份出来到E盘下为update.sql

注: 执行mysqlbinlog mysql-bin.000001 > e:\\update.txt可将二进制文件整体转换为txt

  • 第四步:登录mysql(mysql -h localhost -u root );
  • 第五步:执行source e:update.sql恢复数据
  • 第六步:查看结果

注:mysqlbinlog需在mysql安装目录下的bin目录中执行,执行前需检查目录中是否存在该文件(linux、windows都需要),如果不存在就无法操作。我的解决方案是在mysql官网下载了完整的mysql程序包。


  • technology/mysql/mysql的binlog数据恢复.txt
  • 最后更改: 2019/08/24 22:57
  • (外部编辑)