前言
大部分由于非正常关机后导致的复制问题都是由于没有把数据及时刷到磁盘。
主库意外关闭
如果没有设置主库的sync_binlog选项,就可能在崩溃前没有将最后的几个二进制事件刷新到磁盘中。备库I/O线程因此一直读不到未写入磁盘的事件的状态。但是二进制日志转储线程通常很快,因此此类情况不常发生。
解决:1、开启sync_binlog配置。2、指定备库从下一个二进制日志的开头读日志,但一些日志事件依然是丢失的,建议使用Percona Toolkit中的pt-table-checksum工具校验主备一致性,以便恢复。
备库意外关闭
备库在依次意外关闭后重启,会去读master.info文件以找到上次停止复制的位置。不幸的是,该文件并没有同步到磁盘,文件存储的信息可能是错误的。
解决:如果使用的是InnoDB表,可以在重启后观察MySQL的错误日志。InnoDB在恢复过程中会打印它的恢复点的二进制日志坐标,可以使用这个值来决定备库指向主库的偏移量。