面试题答案
一键面试MySQL主从复制基本原理
- 二进制日志(Binary Log):主库将数据库的写操作记录到二进制日志中,这些日志记录了数据库结构和数据的变更,如
INSERT
、UPDATE
、DELETE
等语句。 - 日志传送:从库通过一个I/O线程连接到主库,请求主库发送二进制日志内容。主库接收到请求后,会有一个日志传送线程将二进制日志以事件(Event)的形式传送给从库。
- 中继日志(Relay Log):从库的I/O线程接收到主库发送的二进制日志事件后,将其写入到本地的中继日志中。
- 重放日志:从库还有一个SQL线程,它会读取中继日志中的事件,并在从库上按照顺序重新执行这些事件,从而使从库的数据与主库保持一致。
利用主从复制确保高可用性及故障接管
- 自动故障检测与切换:
- 使用监控工具:可以使用诸如MHA(Master High Availability)、Orchestrator或其他第三方监控工具。这些工具会定期检查主库的状态,例如通过发送心跳包或执行简单的SQL查询来确认主库是否正常响应。
- 检测到故障:当监控工具检测到主库无响应或发生故障时,会触发故障切换流程。
- 从库快速接管:
- 选择合适从库:监控工具根据一定的规则(如从库延迟最小、优先级高等)从多个从库中选择一个作为新的主库。
- 提升从库为主库:监控工具会执行一系列操作将选中的从库提升为主库,这通常包括停止从库的复制线程(
STOP SLAVE
),使其不再作为从库接收主库日志,然后开启写功能。 - 其他从库重新配置:将其他从库重新配置,使其连接到新提升的主库,开始从新主库接收二进制日志并进行复制,恢复主从复制架构。
- 应用端配置:
- 连接池与配置更新:应用程序通常通过连接池连接数据库。在主库故障切换后,需要及时更新连接池中的数据库连接配置,使其指向新的主库。一些连接池(如HikariCP等)支持动态更新数据库连接配置,能够在一定程度上减少应用程序的中断时间。
- 读写分离调整:如果应用程序采用了读写分离策略,在主库切换后,需要重新调整读请求的分发策略,确保读请求能正确发送到新的主库或合适的从库上。