面试题答案
一键面试MySQL并行复制原理
MySQL并行复制是指在从库上可以同时应用多个主库二进制日志(binlog)中的事务,以提高复制的速度。其原理基于以下几点:
- 基于组提交(Group Commit):主库在提交事务时,会将一组事务作为一个整体进行提交。这些事务在binlog中是连续记录的,并且共享一些提交相关的操作,如刷新日志等。从库利用这个特性,知道这些在主库上属于同一组提交的事务之间没有冲突,可以并行应用。
- 事务依赖关系分析:MySQL通过分析事务在binlog中的记录顺序以及事务之间的锁信息等,判断哪些事务可以并行执行。例如,如果两个事务操作的是不同的表,且不存在锁争用等情况,那么这两个事务可以在从库上并行回放。
主从复制架构中开启并行复制的配置
- 主库配置:
- 确保主库开启二进制日志功能,在
my.cnf
文件中添加或确认以下配置:
- 确保主库开启二进制日志功能,在
log-bin=mysql-bin
server-id=1 # 每个MySQL实例的唯一标识,主库设置为1
修改配置后重启MySQL服务使配置生效。
2. 从库配置:
- 在my.cnf
文件中设置server-id
,确保与主库不同,例如:
server-id=2
- 开启并行复制,从MySQL 5.6开始支持基于库的并行复制,在`my.cnf`中添加:
slave-parallel-type=DATABASE
slave-parallel-workers=4 # 并行线程数,可根据服务器性能调整
从MySQL 5.7开始支持基于逻辑时钟(Logical Clock)的并行复制(增强型并行复制),配置如下:
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=4 # 并行线程数,可根据服务器性能调整
- 配置完成后重启从库MySQL服务,然后通过`CHANGE MASTER TO`命令配置主从关系,例如:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='复制账号',
MASTER_PASSWORD='复制密码',
MASTER_LOG_FILE='主库binlog文件名',
MASTER_LOG_POS=主库binlog位置;
最后执行START SLAVE
启动从库复制进程。可以通过SHOW SLAVE STATUS \G
查看从库状态,确认并行复制是否正常工作。如果Slave_SQL_Running_State
显示为Slave has read all relay log; waiting for more updates
且Seconds_Behind_Master
接近0,说明并行复制工作正常。