一文掌握 MySQL 中的二进制日志,MySQL 优化学习第 10 天
⛳️ 铺垫
本篇博客我们学习一下 MySQL 中的二进制日志,该日志记录了所有对 MySQL 数据库的 CRUD 事件,包括增删改查和对表的系列操作记录,对于失败、回滚或未提交的操作不会记录。通过 MySQL 的二进制日志增量,可以实现 MySQL 的复制和备份。
学习过程中检索到有资料提及,二进制日志(binlog)只会增加 1% 的 MySQL 负载,所以可以一直开启。
⛳️ 开启二进制日志
通过如下命令验证是否开启:
各个参数的含义如下所示:
log_bin
:是否开启 binlog 日志;log_bin_basename
:binlog 存放在位置log_bin_index
:设置 binlog 日志的索引文件的存放路径及索引文件名;
⛳️ 查看目前数据库的二进制文件
使用如下命令:
得到如下结果,二进制文件名以 mysql-bin.000xxx
命名。
还可以使用如下命令查看
⛳️ 二进制日志删除
删除某个日志之前的所有二进制文件,使用如下命令
得到结果如下所示:
也可以清除某个时间点之前的二进制日志
清除所有二进制日志文件
⛳️ 查看二进制日志
使用如下命令可以查阅日志
该命令标准格式如下所示:
参数解析:
IN 'log_name'
:要查询的 binlog 文件名(默认第一个二进制日志);FROM pos
:指定从哪个 pos 起始点开始查起(默认文件起始点);LIMIT [offset,]
:偏移量(默认 0);row_count
:查询总条数(默认所有行)。
如果执行的时候出现如下错误
该原因是由于 pos
设置不正确,工具就会报 Wrong offset or I/O error 的错误,在查看日志内容之前一定要首先定位好。
查看二进制日志文件,建议使用 mysqlbinlog
工具,在 bin 目录可以查找到。
查询日志过程中如果出现如下错误
两个方法可以解决这个问题
在 MySQL 的配置中将
default-character-set=utf8
修改为character-set-server = utf8
,然后重启 MySQL 服务。用
mysqlbinlog --no-defaults mysql-bin.xxxx
命令打开。
第二种方法添加的参数是 --no-default
,表示不读取任何选项文件。
其中的语句被 Base64 加密了,可以增加如下参数
此时完整的命令如下所示:
⛳️ binlog 恢复数据的 2 种情况
二进制文件可以用于恢复文件,这部分内容你可以检索一下相关资料进行学习。
数据库丢失或者 drop
恢复系统自动备份
用 binlog 恢复系统备份时间到此刻的的数据
update 与 delete 误操作
恢复系统自动备份
从 binlog 日志中删除误操作的语句,然后执行 binlog 恢复其他的数据
但是有一点需要注意,如果删除了部分数据,但是没有提前备份数据库,或者二进制日志没有记录数据添加的语句,是无法还原的。
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/c19ae667dbd257a8da6df7f37】。文章转载请联系作者。
评论