MST

星途 面试题库

面试题:MySQL 副本配置中如何确保数据一致性

在 MySQL 显示连接的副本配置场景下,简述你所知道的确保主从数据一致性的方法及原理。
24.3万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

1. 半同步复制

  • 方法:在主库上开启半同步复制插件,从库连接主库时也启用该插件。主库在执行完事务并将二进制日志写入文件后,不会立刻返回给客户端成功,而是等待至少一个从库接收并写入中继日志,才会返回给客户端事务执行成功。
  • 原理:通过这种方式,确保至少有一个从库保存了主库已提交事务的日志,降低了数据丢失的风险,提高了主从数据一致性。当主库崩溃时,由于至少有一个从库有最新事务日志,可从该从库提升为主库继续服务,减少数据不一致情况。

2. GTID(全局事务标识符)

  • 方法:在主从库配置文件中开启 GTID 模式。主库执行事务时,为每个事务分配一个唯一的 GTID。从库通过获取主库的 GTID 来识别并应用事务,确保主从库执行相同的事务集合。
  • 原理:GTID 包含了主库的 UUID 以及该事务在主库上的序列号,使得主从库在复制过程中能够精准定位和匹配事务。即使从库在复制过程中出现故障重新连接,也能依据 GTID 跳过已执行的事务,直接应用未执行的事务,从而保证数据一致性。

3. 双活或多活架构配合同步机制

  • 方法:部署多个主库,这些主库之间通过同步机制保持数据一致,从库可以连接任意一个主库进行数据复制。例如,使用 MHA(Master High Availability)等工具实现主库间故障转移和数据同步。
  • 原理:当一个主库出现故障时,其他主库能继续提供服务,并且由于主库间的数据同步机制,新的主库拥有与原主库一致的数据,从库可以继续从新主库获取数据,维持数据一致性。同时,通过多主库架构还能提高系统的读写性能和可用性。

4. 定期数据校验和修复

  • 方法:使用工具如 pt-table-checksum 来定期对比主从库数据。该工具会在主库上生成校验和,并将其传递到从库进行对比,找出不一致的数据行。当发现不一致时,可使用 pt-table-sync 工具来修复从库数据,使其与主库一致。
  • 原理:通过计算数据的校验和,能够精确地判断主从库数据是否一致。pt-table-checksum 利用主从复制的原理,在主库上生成校验和并传递到从库,从库对比校验和来发现数据差异。pt-table-sync 则通过生成特定的 SQL 语句来修改从库中不一致的数据,从而保证主从数据一致性。