在群里聊天的时候,一个群友说,MySQL生产库主库宕机,但是主从数据库数据一致,但是从库的日志比主库多,很是不理解!
咨询后发现,生产库的主库没有设置sync_binlog=1,而是为sync_binlog=0
因此,在主库写入数据的时候,事务已经提交,但是数据在binlog cache中,没有写入到磁盘,并且数据已经同步到从库,此刻主库宕机,binlog cache中数据丢失,导致从库的日志比主库多。
群友重新配置主从之后,并将sync_binlog设置为1
sync_binlog的重要性及意义:
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。