Mysql 数据库数据恢复 (利用mysqlbinlog)

Binlog 日志,即 binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个 binlog 日志文件,从节点从 binlog 中同步数据,也可以通过 binlog 日志来恢复数据

1、登录 mysql 之后使用下面的命令查看是否开启 binlog#

log_bin = OFF 即为关闭,查看 binlog 为 off 关闭状态

show variables like 'log_%';

image.png

2、如何开启 binlog#

编辑对应的配置文件:vi /etc/my.cnf
加入以下内容:

server_id=2
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 30
  1. server-id = 1 (单个节点 id)
  2. log-bin= mysql-bin (/var/lib/mysql/mysql-bin,位置一般和 mysql 库文件所在位置一样)
  3. expire_logs_days = 30 (表示此日志保存时间为 30 天)

image.png

3、重启 mysql 服务#

systemctl restart mysqld

4、再次查看是否开启#

使用命令:

show variables like 'log_%';

进行查看,为 ON 表明 binlog 开启

image.png

5、具体流程#

1、查看所有 binlog 日志文件列表

show master logs;

image.png

2、查看最后一个 binlog 日志的编号名称及其最后一个操作事件 pos 结束点的值:

show master status;

image.png

3、Flush logs 刷新日志,此刻开始产生一个新编号的 binlog 文件,例如:

flush logs

image.png

每当 mysqld 服务重启时,会自动执行刷新 binlog 日志命令,mysqldump 备份数据时加 - F 选项也会刷新 binlog 日志
4、清空所有 binlog 日志命令:reset master;
5、查看 binlog 文件内容,使用查看工具 mysqlbinlog 来查看 (cat/vi/more 都是无法打开的)
6、上面的方法读取内容较多不易观察,以下命令更为方便查看命令:

1、使用 mysqlbinlog 自带查看命令法

注意:

  • binlog 是二进制文件,普通文件查看器 cat、more、vim 等都无法打开,必须使用自带的 mysqlbinlog 命令查看。
  • binlog 日志与数据库文件在同目录中。
  • 在 Mysql5.5 以下版本使用 mysqlbinlog 命令时如果报错,就加上”–no-defaults” 选项
  • 使用 mysqlbinlog 命令查看 binlog 日志内容,下面截取其中的一个片段分析分析:
show binlog events in 'mysql-bin.000001';

上面这种办法读取出 binlog 日志的全文内容比较多,不容易分辨查看到 pos 点信息,下面介绍一种更为方便的查询命令

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

参数解释:

  • IN ‘log_name’: 指定要查询的 binlog 文件名(不指定就是第一个 binlog 文件)
  • FROM pos: 指定从哪个 pos 起始点开始查起(不指定就是从整个文件首个 pos 点开始算)
  • LIMIT【offset】:偏移量 (不指定就是 0)
  • row_count : 查询总条数(不指定就是所有行)

image.png
指定查询,从 pos 点 406 开始查询,如下:

image.png

7、找到日志存放地方:

如:/usr/local/mysql/data 或者 /var/lib/mysql

mysqlbinlog --no-defaults --start-position=236 --stop-position=163577350 mysql-bin.000010 | mysql -uroot -p;

本文转自:
juejin.cn/post/7169853953604059173...

本作品采用《CC 协议》,转载必须注明作者和本文链接
最美的不是下雨天,而是和你一起躲过的屋檐!
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。