数据不一致是个很大问题,数据库双活情况下两份事务在本地和远端,两边分别执行这次事务,一般化不会有一致性问题的,但双活状态下,以保证数据一致性为前提,双活不意味着数据一致,所以,还需要灾备端一样要保留好多份快照以备不时之需,当然这是后话,数据事务的一致性,需要保证首先相同的事务环境进行提交,保证两端的数据一致性,严格要求数据的绝对统一,如果出现数据不一致的情况,往往是灾难性的,特别是跟钱相关的尤为重要, 这个可能还包括后期的数据比对,数据修正,需要各方面协调工作。
收起主备数据不一致常见原因
1 备库写数据
2 执行non-deterministic query
3 回滚掺杂事务表和非事务表的事务
4 binlog或者relay log数据损坏
应对措施
1 禁止修改备库数据
2 采用row-based replication
3 避免同一个事务中同时引用innodb和myisam表
4 开启binlog checksum
其中binlog checksum是5.6引入的新功能,由参数binlog-checksum控制(默认关闭);
开启该功能后,master在写binlog event时同时记录checksum,slave读取relay log时对每个event执行checksum校验,如果失败则停止sql thread并报错。
master-verify-checksum:默认关闭,开启后主库会对每个binlog event进行checksum验证,如果失败则停止写入并报错;
slave_sql_verify_checksum:默认关闭,开启后备库读relay log时会对每个event进行checksum验证;