Mysql 数据库数据恢复 (利用mysqlbinlog)
Binlog 日志,即 binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个 binlog 日志文件,从节点从 binlog 中同步数据,也可以通过 binlog 日志来恢复数据
1、登录 mysql 之后使用下面的命令查看是否开启 binlog#
log_bin = OFF 即为关闭,查看 binlog 为 off 关闭状态
show variables like 'log_%';
2、如何开启 binlog#
编辑对应的配置文件:vi /etc/my.cnf
加入以下内容:
server_id=2
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 30
- server-id = 1 (单个节点 id)
- log-bin= mysql-bin (/var/lib/mysql/mysql-bin,位置一般和 mysql 库文件所在位置一样)
- expire_logs_days = 30 (表示此日志保存时间为 30 天)
3、重启 mysql 服务#
systemctl restart mysqld
4、再次查看是否开启#
使用命令:
show variables like 'log_%';
进行查看,为 ON 表明 binlog 开启
5、具体流程#
1、查看所有 binlog 日志文件列表
show master logs;
2、查看最后一个 binlog 日志的编号名称及其最后一个操作事件 pos 结束点的值:
show master status;
3、Flush logs 刷新日志,此刻开始产生一个新编号的 binlog 文件,例如:
flush logs
每当 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 : 查询总条数(不指定就是所有行)
指定查询,从 pos 点 406 开始查询,如下:
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 协议》,转载必须注明作者和本文链接
推荐文章: