部署一套主从架构的集群,创建过程较简单,可以参考历史文章部署 MySQL主从复制搭建 部署一主一从即可。

在主库中创建表及测试数据
MySQL默认的隔离级别为 RR(Repeatable Read),在此隔离级别下,对比binlog格式为ROW、STATEMENT是否会造成主从数据不一致
其实不用测试大家也应该对RR级别下ROW格式的binlog有信心,但是,万事皆需实践检验。
步骤说明如下:
具体步骤如下:
为了和之前的步骤一致,先初始化数据
再将binlog日志格式改为STATAMENT格式(全局及会话级都改一下,或者修改全局变量后重新登录也行,当然 只改会话级别的也可以测试),然后 再次进行测试。
步骤说明如下:
也就是此时主从结果也是一致的,原因在于,binlog里存储的语句顺序如下:
与主库执行的顺序是一致的,因此,主从的结果是一致的。
为了和之前的步骤一致,先初始化数据
再将binlog日志格式改为STATAMENT格式(全局及会话级都改一下,或者修改全局变量后重新登录也行,当然 只改会话级别的也可以测试),然后 再次进行测试。
步骤说明如下:
也就是此时主从结果也是一致的。
因为当前版本已经不支持RC+STATEMENT组合下数据的操作,否则将报如下错误:
因此单纯根据步骤讲解
因为binlog是按照commit时间的顺序保存,因此上述步骤在binlog里会以如下顺序存储:
从库通过binlog应用后,最终的结果将导致主库的数据不一样(具体案例后续安装低版本后演示)。
因而,此种场景下很容易导致数据不一样。