主从切换是怎么保证数据一致的?从库为什么会延迟
前言
主库出问题,一般需要切换从库为主库。那么对于正在同步的数据,如何保证一致性呢?
备库有时候延迟好几个小时的原因有哪些?解决方案是什么?
主从切换是怎么保证数据一致的?从库为什么会延迟
- 前言
- 主库出问题了,从库怎么办?
- 备库为什么会延迟好几个小时?
主库出问题了,从库怎么办?
CTID,就是mysql在写入binlog的时候会生成一个: service-id:10
这样的字符串,前面表示机器的uuid,后面表示在次机器上执行的第几个事务。
单调递增。
从库读取时,只需要根据这个判断是否已经执行过,从库维护了所有执行过的CTID列表。
这样切换主库的时候只需要根据这个判断即可。
备库为什么会延迟好几个小时?
因为主库是并发响应的,从库最开始是单线程同步的。
还有大事物等原因。
mysql已经引入了多线程同步的机制。
一种是通过对于同时进入到commit的事务,是可以并行执行的。msyql的主库会把写入redolog和commit之间的所有事务记录到binlog中。然后在从库中分配到不同的线程work中执行。
第二种是 计算出每一行的hash值,如果两个事务没有相同值,那么就并行执行
第三种是 在第二种的基础上增加了一个约束,即在主库上同一个线程执行的两个事务,在从库也要保证顺序。