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 协议》,转载必须注明作者和本文链接
最美的不是下雨天,而是和你一起躲过的屋檐!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!