二进制日志文件内容和中继日志内容的区别
首先分析下:二进制日志记录的是主库的修改行为,而中继日志记录的是接收自主库的二进制日志,那是否可以认为:从库的中继日志=主库的二进制日志呢?至少Oracle 物理备库的归档=主库的归档 可以这么认为。
以下开始做实验:
以下5.112是主库,5.117是从库,配了半同步。
首先主库上执行flush logs;生成了新的二进制日志,同时从库的中继日志发现也跟着切换了。再执行一条delete操作后,我们来看结果。
我们先登录数据库查现在的二进制日志和中继日志信息。
主库现在的二进制文件是mysql-bin.000058,位置点是335
这个从库上也能查到:
再看物理文件:
主库的二进制日志:
注意到了没有,物理文件的大小跟主从库的POS值(位置点)是一样的!!!
从物理文件来看,主从库的文件大小并不一致,难道主从库的这两个文件内容不一样?我们用mysqlbinlog导出内容来看看。
主库:mysqlbinlog --base64-output=decode-rows -v -v mysql-bin.000058 > binlog
从库:mysqlbinlog --base64-output=decode-rows -v -v mysql-relay-bin.000031 > relaylog
使用工具,对比一下内容:
可以发现:二进制日志和中继日志除了开头注释部分和位置点信息不一样外,其他信息是一样的,而且开头的注释信息无关紧要。注释信息以下,主库的二进制日志位置点是120,从库的中继日志是283,这也是我们每次执行flush logs;查到的第一个位置点。同时注释信息以下,二进制和中继日志的每个位置点都差了163。
所以综上,二进制日志文件内容和中继日志内容的区别是:
1. 两者文件开头的注释内容不一样,两者执行的内容是一样的。
2. 两者主要信息的位置点差了163。
3. 两种文件的位置点值,可认为跟其文件大小一致。