浅谈 MySQL Binlog 日志
1 什么是 binlog?
binlog 是二进制日志文件,用于记录 mysql 的数据更新或者潜在更新状况,在 mysql 主从复制中就是依靠的 binlog。可以通过语句“show binlog events in 'binlogfile'”来查看 binlog 的具体事件类型。binlog 记录的所有操作实际上都有对应的事件类型的,MySQL binlog 的三种工作模式:
- Row level(行记录)简介: 
- 日志中会记录每一行数据被修改的情况,然后在 slave 端对相同的数据进行修改。 
- 优点: 
- 所有更改都可以复制。这是最安全的复制形式。 
- 对于以下类型的语句,源上需要更少的行锁,从而实现更高的并发性: 
- INSERT ... SELECT
- INSERT与- AUTO_INCREMENT
- UPDATE``DELETE带有- WHERE不使用键或不更改大多数检查行的子句的语句 。
- 需要的行锁更少 。 
- 缺点: 
- RBR 可以生成更多必须记录的数据。写入数据可能会导致并发问题。用 
- 无法在副本上看到从源接收并执行了哪些语句。 
- 对于使用 - MyISAM存储引擎的表,- INSERT当将它们作为基于行的事件应用于二进制日志时,语句的副本需要比将它们作为语句应用时更强的锁。这意味着- MyISAM在使用基于行的复制时不支持对表的并发插入。
- Statement level(语句记录,默认)简介: 
- 每一条被修改数据的 sql 都会记录到 master 的 bin-log 中,slave 在复制的时候 sql 进程会解析成和原来 master 端执行过的相同的 sql 再次执行。在主从同步中一般是不建议用 statement 模式的,因为会有些语句不支持,比如语句中包含 UUID 函数,以及 LOAD DATA IN FILE 语句等 
- 优点: 
- 写入日志文件的数据更少。当更新或删除影响许多行时,这会导致 日志文件所需的存储空间少得多。这也意味着可以更快地完成备份和恢复。 
- 日志文件包含进行了任何更改的所有语句,因此它们可用于审计数据库。 
- 缺点: 
- INSERT ... SELECT与基于行的复制相比,需要更多的行级锁。
- UPDATE需要表扫描的语句,必须比基于行的复制锁定更多的行。
- 对于 - InnoDB,- INSERT使用- AUTO_INCREMENT阻塞其他非冲突- INSERT语句的语句。
- 对于复杂语句,必须在更新或插入行之前在副本上评估和执行语句。使用基于行的复制,副本只需要修改受影响的行,而不是执行完整的语句。 
- 如果对副本进行评估时出现错误,尤其是在执行复杂语句时,则基于语句的复制可能会随着时间的推移慢慢增加受影响行的误差幅度。 
- 存储函数以与 - NOW()调用语句相同的值执行 。但是,这不适用于存储过程。
- 必须在副本上应用确定性可加载函数。 
- 表定义在源和副本上必须(几乎)相同。 
- Mixed(混合模式)简介: 
- 结合了 Row level 和 Statement level 的优点,同时 binlog 结构也更复杂。 
binlog 的格式:
 
 2 binlog 有什么作用?
- MySQL 主从复制:MySQL Replication 在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 来达到 master-slave 数据一致的目的 
- 数据恢复:通过使用 mysqlbinlog 工具来使恢复数据 
3 binlog 的常用操作
3.1 启动和关闭 binlog
启动 binlog,修改配置文件并重启:
关闭 binlog:
删除配置文件中相应的内容
查看 binlog 是否开启:
3.2 查看 binlog
先在 mysql 中看 binlog 文件的名称
根据 binlog 名称查看 binlog 内容
上面输出包括信息:
- position: 位于文件中的位置,即第一行的,说明该事件记录从文件第 21019 个字节开始 
- timestamp: 事件发生的时间戳。 
- server id: 服务器标识。 
- end_log_pos 表示下一个事件开始的位置(即当前事件的结束位置+1) 
- thread_id: 执行该事件的线程 id 。 
- exec_time: 事件执行的花费时间 
- error_code: 错误码,0 意味着没有发生错误 
- type:事件类型 Query 
3.3 binlog 常用命令
3.4 切换 binlog 的模式
参考文章:
https://blog.csdn.net/ljb825802164/article/details/105098174
https://www.jianshu.com/p/ea666baf0d82
https://blog.csdn.net/wwwdc1012/article/details/88373440
https://dev.mysql.com/doc/refman/5.7/en/replication-sbr-rbr.html
版权声明: 本文为 InfoQ 作者【Barry Yan】的原创文章。
原文链接:【http://xie.infoq.cn/article/d3a3276027c2295dc80cafe54】。文章转载请联系作者。










 
    
评论