"MySQL数据库高级工程师-面试题01-风哥整理"
本文主要探讨了MySQL复制的相关知识,包括复制的基本原理、线程交互、数据一致性保证以及如何处理复制中的问题。以下是详细的解释:
1. **MySQL复制原理与流程**:
- 主服务器上的binlog线程记录所有改变数据库数据的语句,存储在binlog中。
- 从服务器的IO线程启动后,从主服务器获取binlog内容,并保存到自己的relay log中。
- 从服务器的SQL执行线程读取并执行relay log中的语句。
2. **MySQL复制线程**:
- 主服务器上有binlog dump线程,负责传输binlog事件到从服务器。
- 从服务器上有IO线程,接收并写入relay log。
- 从服务器的SQL线程读取relay log并执行。在多线程复制中,SQL线程作为协调者,worker线程负责实际的binlog事件执行。
3. **保证复制数据一致性**:
- MySQL 5.5之前,slave的SQL线程位置信息保存在文件中,可能导致不一致。5.6引入了参数`relay_log_info_repository=TABLE`,将位置信息存储在mysql.slave_relay_log_info表中,保证了一致性。
- GTID(全局事务标识符)复制从5.6开始引入,确保每个GTID对应的事务在每个实例上最多执行一次,增强了一致性。
- 半同步复制在5.5引入,5.7的无损半同步复制进一步优化,确保事务在接收到从服务器确认后才提交,避免数据不一致。
4. **处理复制延迟**:
- MySQL 5.5采用单线程复制,5.6引入多库复制,5.7实现真正的多线程复制,基于group commit,允许多个worker线程并发执行,降低了延迟。
5. **复制故障处理**:
- 当主服务器意外宕机,未传到从服务器的binlog处理取决于宕机时是否已切换为异步复制。如果是异步,丢失的binlog需手动处理;如果是同步,可能需要重新同步或使用GTID来定位并恢复。
6. **面试题提示**:
- 题目来源于MySQL数据库高级工程师的面试题集,涵盖了数据库的高级知识,如Oracle和MySQL的学习指南、职业规划和就业待遇等。
以上内容对于理解MySQL复制机制和保证数据一致性的策略至关重要,是MySQL DBA面试和工作中需要掌握的关键点。