面试题答案
一键面试故障排查
- 检查Binlog参数
- log-bin:确保主库开启了二进制日志功能,在主库的配置文件(如
my.cnf
)中查看是否有log-bin
参数,若没有需添加并重启MariaDB服务。例如:
- log-bin:确保主库开启了二进制日志功能,在主库的配置文件(如
[mysqld]
log-bin=/var/lib/mysql/mysql-bin
- **server-id**:主从库的`server-id`必须唯一。检查主库和从库的配置文件,主库一般设置为1,从库设置为其他唯一整数,如2、3等。
[mysqld]
server-id=1 # 主库
server-id=2 # 从库
- **binlog_format**:查看主库的二进制日志格式,常见格式有`STATEMENT`、`ROW`、`MIXED`。不同格式在数据复制上可能存在差异,若怀疑数据不一致与格式有关,可根据业务情况调整。查看方法:登录主库执行`SHOW VARIABLES LIKE 'binlog_format';`。
2. 日志分析
- 主库Binlog分析
- 查看主库二进制日志列表:登录主库执行SHOW BINARY LOGS;
,获取二进制日志文件名及大小等信息。
- 查看二进制日志内容:使用mysqlbinlog
工具分析具体的日志内容。例如,要查看mysql-bin.000001
日志文件,可执行mysqlbinlog /var/lib/mysql/mysql-bin.000001
。分析过程中关注DDL(数据定义语言)、DML(数据操作语言)语句,检查是否有异常操作。
- 从库Relay Log分析:从库的中继日志记录了从主库接收的二进制日志内容。查看中继日志列表:登录从库执行SHOW RELAYLOG EVENTS;
。使用mysqlbinlog
工具分析中继日志内容,与主库二进制日志对比,查看是否存在语句缺失、执行顺序不一致等问题。
- 对比主从库数据:使用工具如pt-table-checksum
(Percona Toolkit中的工具)来对比主从库数据。安装Percona Toolkit后,在主库上执行pt-table-checksum --nocheck-replication-filters --replicate=checksums.checksums
,该命令会在主库上创建checksums
库并记录主从库数据的校验和,然后可通过pt-table-sync
工具根据校验和来同步数据。
3. 其他排查
- 网络问题:检查主从库之间的网络连接是否稳定,是否存在丢包、延迟高等情况。可使用ping
、traceroute
等网络工具进行测试。若网络不稳定,可能导致主从复制延迟或数据传输不完整。
- 主从库负载:查看主从库的系统负载、CPU使用率、内存使用率等指标。过高的负载可能导致复制延迟或数据处理异常。使用top
、free
等命令查看系统资源使用情况。
优化策略
- 参数优化
- sync_binlog:主库上
sync_binlog
参数控制二进制日志写入磁盘的频率。取值为0时,MySQL将二进制日志缓存到内存,由操作系统决定何时写入磁盘;取值为1时,每次事务提交都将二进制日志同步到磁盘,安全性最高但性能可能受影响。可根据业务需求调整该参数,如取值为10,每10次事务提交同步一次二进制日志到磁盘。
- sync_binlog:主库上
[mysqld]
sync_binlog=10
- **innodb_flush_log_at_trx_commit**:该参数控制InnoDB存储引擎日志写入磁盘的策略。取值为0时,每秒将日志缓冲区内容写入日志文件并刷新到磁盘;取值为1时,每次事务提交都将日志缓冲区内容写入日志文件并刷新到磁盘;取值为2时,每次事务提交将日志缓冲区内容写入日志文件,但每秒刷新到磁盘。为保证数据一致性和主从复制稳定性,一般设置为1。
[mysqld]
innodb_flush_log_at_trx_commit=1
- 配置优化
- 多线程复制:从MariaDB 10.0开始支持多线程复制(MTS,Multi - Threaded Slave)。在从库配置文件中开启多线程复制:
[mysqld]
slave_parallel_type=LOGICAL_CLOCK
slave_parallel_workers=4 # 根据服务器CPU核心数调整
- **半同步复制**:在主从库上配置半同步复制,可提高数据一致性。主库安装半同步复制插件并配置:
INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_master_timeout = 10000; # 等待从库确认的超时时间(毫秒)
从库安装半同步复制插件并配置:
INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
START SLAVE;
- 监控与维护
- 定期检查:定期使用工具如
pt-table-checksum
检查主从库数据一致性,设置监控任务定时执行。 - 日志清理:定期清理主库过期的二进制日志和从库的中继日志,避免占用过多磁盘空间。主库清理二进制日志可使用
PURGE BINARY LOGS
语句,如PURGE BINARY LOGS BEFORE '2024 - 01 - 01 00:00:00';
。从库清理中继日志可执行RESET RELAYLOG;
。 - 性能监控:使用工具如
Prometheus + Grafana
监控主从库的性能指标,包括复制延迟、网络流量、数据库负载等,及时发现潜在问题。
- 定期检查:定期使用工具如