面试题答案
一键面试MariaDB多源复制配置优化以满足性能需求
- 网络配置
- 确保主从服务器之间网络稳定且带宽充足。可以通过
iperf
等工具测试网络带宽,尽量减少网络延迟和丢包。例如,在主从服务器上分别安装iperf
,在主服务器执行iperf -s
开启服务端,从服务器执行iperf -c <主服务器IP>
测试带宽。 - 配置合理的防火墙规则,允许主从服务器之间的MySQL复制端口(默认3306)通信。
- 确保主从服务器之间网络稳定且带宽充足。可以通过
- 主服务器配置
- 启用二进制日志,在
my.cnf
文件中确保log - bin
参数开启,如log - bin = /var/log/mysql/mysql - bin.log
,并设置合适的binlog - format
,对于复杂业务逻辑推荐使用ROW
格式,它能更准确记录数据变化,减少主从数据不一致风险,配置为binlog - format = ROW
。 - 合理设置
sync - binlog
参数,为兼顾性能与数据安全,可设置为100或1000,即sync - binlog = 100
,表示每写100次二进制日志就同步到磁盘。
- 启用二进制日志,在
- 从服务器配置
- 配置多个复制通道,根据业务需求合理分配数据源到不同通道,在
my.cnf
中设置relay - log - index
和relay - log
参数,如relay - log - index = /var/log/mysql/slave1 - relay - bin.index
,relay - log = /var/log/mysql/slave1 - relay - bin.log
,针对每个通道进行配置。 - 调整
slave - parallel - type
和slave - parallel - workers
参数,对于复杂业务逻辑,可设置slave - parallel - type = LOGICAL_CLOCK
,并根据服务器CPU核心数合理设置slave - parallel - workers
,例如8核CPU可设置为8,即slave - parallel - workers = 8
,提高从服务器并行复制能力。 - 设置合适的
innodb - log - file - size
,增加InnoDB日志文件大小可减少日志切换频率,提升性能,可设置为512M,即innodb - log - file - size = 512M
。
- 配置多个复制通道,根据业务需求合理分配数据源到不同通道,在
复制延迟排查和修复
- 确认延迟
- 通过
SHOW SLAVE STATUS \G
命令查看Seconds_Behind_Master
字段,如果该值持续增大且不为0,说明存在复制延迟。
- 通过
- 排查网络问题
- 使用
ping
命令测试主从服务器之间网络连通性和延迟,如ping <主服务器IP>
,若有丢包或延迟过高,检查网络设备(路由器、交换机等)配置和线路连接。 - 再次使用
iperf
工具确认网络带宽是否足够。
- 使用
- 检查主服务器负载
- 通过
top
命令查看主服务器CPU、内存、磁盘I/O等资源使用情况。若CPU负载过高,优化主服务器上其他占用资源的进程;若磁盘I/O过高,考虑优化磁盘配置,如使用RAID 10提升读写性能或升级为SSD磁盘。
- 通过
- 检查从服务器负载
- 同样使用
top
命令查看从服务器资源使用情况。若负载过高,可增加从服务器资源(CPU、内存等),或优化从服务器上其他进程。 - 检查
slave - parallel - workers
设置是否合理,可适当调整该值,重新启动从服务器复制线程查看效果。
- 同样使用
- 查看复制日志
- 查看主服务器二进制日志(
/var/log/mysql/mysql - bin.log
)和从服务器中继日志(/var/log/mysql/slave - relay - bin.log
),分析是否有错误信息。若有错误,根据错误提示进行修复,如权限问题、数据类型不匹配等。
- 查看主服务器二进制日志(
数据不一致排查和修复
- 数据对比
- 使用
pt - table - checksum
工具进行主从数据对比,安装percona - toolkit
后,在从服务器执行pt - table - checksum --user=<用户名> --password=<密码> --host=<主服务器IP> --recursion - method=dsn='h=<从服务器IP>,u=<用户名>,p=<密码>'
,它会计算主从服务器表数据的校验和并对比,找出不一致的表。
- 使用
- 排查原因
- 检查主服务器上是否有未提交事务,通过
SHOW ENGINE INNODB STATUS \G
查看InnoDB状态,分析TRANSACTIONS
部分,若有长时间未提交事务,根据业务需求决定是否回滚或提交。 - 查看从服务器复制设置,确认
slave - sql - thread
和slave - io - thread
状态,若有异常停止,通过SHOW SLAVE STATUS \G
查看错误信息进行修复。 - 检查主从服务器上数据库版本、存储引擎设置是否一致,不一致可能导致数据不一致,如存储引擎对数据存储格式和处理方式有差异。
- 检查主服务器上是否有未提交事务,通过
- 修复数据
- 对于数据不一致的表,根据
pt - table - checksum
结果,可使用pt - table - sync
工具进行数据同步,在从服务器执行pt - table - sync --execute --user=<用户名> --password=<密码> --source h=<主服务器IP>,D=<数据库名>,t=<表名> --destination h=<从服务器IP>,D=<数据库名>,t=<表名>
,它会自动将从服务器数据同步到与主服务器一致。 - 如果是由于数据类型不匹配等原因导致复制失败,先在从服务器上修正数据类型,然后重新启动从服务器复制线程。
- 对于数据不一致的表,根据