/etc/my.cnf中sync_binlog参数设置累积多少个事务数后落盘

 

说明:

1.     数据存到数据库和binlog落盘是同时进行的

2.     数据是先存在内存中,达到设置的事务数后才落盘的

3.     从库读的是主库的内存中的数据,并非落盘的数据

4.     写入数据时,只要主库存活,就写入到主库

 

mysql数据库集群出现1236错误导致主库与从库无法同步的问题解析_第1张图片

过程状态记录:

 前提:50个事务一落盘

1.     未断电前:主库内存中正在从50进行到60,从库读取主库内存中到58并存入从库

2.     断电:主库中50-60的数据存在于内存中,binlog无法落盘,数据没有保存到数据库文件。开始写数据到从库中,数据进行到61,之后数据逐渐写入从库

3.     主库重启:主库上的50-60的binlog丢失,数据丢失,数据开始写入主库,binlog记录从50开始。从库从主库内存中读数据,读到50时,从库发现自己已经接收过50的数据,就不再接收,就不进行同步了。此时状态为:只写数据到主库,从库不同步。

4.     最终结果:从库中的数据为1-58,61-…,缺少的是58-60的,主库中的数据是1-49,…-…,

 

 

完整过程描述:

50个事务后落盘,主库正在写数据,此时断电,内存中写到60,从库从主库内存中读到58,从库读取到58后产生数据到从库上,主库由于未到50个事务,不会存盘。导致50-60之间的事务,未能生成binlog日志到盘上,同时数据也未写入到数据库文件上,导致58-60的数据既不在主库上也不在从库上,丢失。主库重启后,由于盘上记录的数据是到49,因而从50开始记录,此时从库再从主库上读的时候发现自己已经有50了,这样就产生冲突,就无法继续读取主库的数据了。

 

现象:同步损坏,主库重启后,再写数据,只到主库