/etc/my.cnf中sync_binlog参数设置累积多少个事务数后落盘数据库
说明:ide
1. 数据存到数据库和binlog落盘是同时进行的spa
2. 数据是先存在内存中,达到设置的事务数后才落盘的日志
3. 从库读的是主库的内存中的数据,并不是落盘的数据blog
4. 写入数据时,只要主库存活,就写入到主库事务
过程状态记录:内存
前提:50个事务一落盘同步
1. 未断电前:主库内存中正在从50进行到60,从库读取主库内存中到58并存入从库it
2. 断电:主库中50-60的数据存在于内存中,binlog没法落盘,数据没有保存到数据库文件。开始写数据到从库中,数据进行到61,以后数据逐渐写入从库class
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了,这样就产生冲突,就没法继续读取主库的数据了。
现象:同步损坏,主库重启后,再写数据,只到主库