MySQL Binlog(本文主体是5.6,其它版本会说明)
MySQL Binlog是记录一些对数据库修改信息的日志。举例(增,改,查,set 等等)
首先说MySQL Binlog的作用是什么?
1. 复制用途,MySQL replication 的传输介质。通过记录一个MySQL实例上发生的改变,应用到另一个数据库上,来实现复制。
2. 数据的恢复,当一部分数据由于某些原因丢失,儿这段时间的binlog 还在,则可以通过binlog恢复这段时间的数据。
MySQL Binlog分为格式:1) Statement, 2) Row , 3) Mixed
他们之间的区别在哪里呢?
1) Statement
是语句形式的日志,目的在于将主端所有的对MySQL实例的修改语句记录到binlog中。
优点:在 statement 模式下,首先就是解决了 row 模式的缺点,不需要记录每一行数据的变化,减少了 binlog 日志量,节省 I/O 以及存储资源,提高性能。因为他只需要记录在 master 上所执行的语句的细节,以及执行语句时候的上下文的信息。
2) Row
是将一部分修改MySQL实例的语句变换形式,记录到binlog中。变换成以每一行的变化为单位的记录。比如,
{+(1,‘abc’)} 代表新增一行
{-(1,'abc'), +(1,'bbbbb')} 代表更新一行
{-(1,‘bbbbb’)} 代表删除一行
优点:在 row 模式下,bin-log 中可以不记录执行的 SQL 语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以 row 的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程或 function ,以及 trigger 的调用和触发无法被正确复制的问题。
3)Mixed
是说中和一下两种模式,有的用Row,有的用 statement。由MySQL自己做出选择。