回答
MySQL 通过 server 层的 binlog 实现数据复制,保障主备服务器的数据一致性。
但主从复制会出现如下问题:
- 异步复制延迟,MySQL 的默认复制模式为异步复制,当网络延迟或数据库负载过高时,主库和备库会出现数据不一致现象。
- 奔溃恢复不一致,也是因为异步复制,当主库提交事务后奔溃,变更数据尚未同步至从库,那么从库会丢失这些事务,从而导致数据不一致。
- GTID 不一致,由于设置不当以及操作错误导致主从 GTID 不一致,从而出现主从库之间的数据偏差。
确保主从复制数据一致性
- 二进制日志(Binlog)
MySQL 主服务器将所有数据库变更记录在 binlog 中,然后从服务器同步这些日志文件并重放,恢复主库的数据变更。
- 主从复制
从数据库通过复制主数据库的 binlog 来实现数据的同步。主从复制主要分为两大过程,从库 IO 线程读取主库的 binlog,然后其 SQL 线程在从库执行 binlog 中的操作。