面试题答案
一键面试配置半同步复制
- 安装插件: 在主库和从库上都需要安装半同步复制插件。在 MySQL 5.7 及以上版本中,半同步复制插件默认已经包含在安装包中。使用以下命令安装:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
- 主库配置:
修改主库的配置文件(一般是
my.cnf
或my.ini
),添加或修改以下参数:
[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 10000 # 等待从库确认的超时时间,单位毫秒
重启 MySQL 服务使配置生效。然后可以通过以下命令确认配置是否生效:
SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';
SHOW VARIABLES LIKE 'rpl_semi_sync_master_timeout';
- 从库配置: 修改从库的配置文件,添加或修改以下参数:
[mysqld]
rpl_semi_sync_slave_enabled = 1
重启 MySQL 服务后,在从库上执行以下命令启动半同步复制:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='复制账号',
MASTER_PASSWORD='复制密码',
MASTER_LOG_FILE='主库二进制日志文件',
MASTER_LOG_POS=主库二进制日志位置;
START SLAVE;
同样可以通过以下命令确认配置是否生效:
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
网络波动时确保数据一致性和服务可用性
- 设置合理的超时时间:
在配置半同步复制时,主库的
rpl_semi_sync_master_timeout
参数非常关键。当网络波动时,如果设置的超时时间过短,可能导致主库过早判定从库不可达而切换为异步复制,增加数据不一致风险;如果设置过长,又可能导致主库长时间等待从库确认,影响服务性能。需要根据实际网络情况进行合理调整,一般建议在几秒到几十秒之间,通过测试确定最佳值。 - 监控和预警:
使用 MySQL 自带的状态监控命令以及外部监控工具(如 Prometheus + Grafana)来实时监控复制状态。例如,通过
SHOW STATUS LIKE 'Rpl_semi_sync%';
命令查看半同步复制相关状态变量,如Rpl_semi_sync_master_clients
表示当前连接的半同步从库数量,Rpl_semi_sync_master_timeout_count
表示主库等待从库确认超时的次数等。设置合理的阈值,当状态指标异常时及时发出预警,以便运维人员及时处理。 - 故障转移策略:
当网络波动导致部分从库长时间无法响应时,可考虑采用多从库架构。主库可以等待多个从库中的部分从库确认写操作,而不是等待所有从库。例如,如果有 3 个从库,配置为只要 2 个从库确认即可,这样在其中一个从库因网络问题暂时不可用时,主库仍能正常工作,保证服务可用性。同时,对于故障的从库,当网络恢复后,要确保其能快速追赶上主库的数据,这可以通过优化从库的复制线程设置,如调整
slave_parallel_workers
参数来提高从库应用中继日志的并行度。 - 数据恢复和校验:
在网络波动结束后,对主从库的数据一致性进行校验。可以使用工具如
pt-table-checksum
来对比主从库的数据表,检测是否存在不一致的情况。如果发现不一致,根据具体情况可以使用pt-table-sync
工具进行数据同步修复,确保数据的最终一致性。