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 协议》,转载必须注明作者和本文链接