面试题答案
一键面试优化过滤器性能的策略
- 合理设计过滤规则:尽量避免复杂的过滤条件,只过滤确实不需要复制的数据。例如,避免使用通配符匹配大表,而是基于具体的业务逻辑,如特定的分区字段等进行过滤。
- 减少过滤的数据量:在主库上尽量将需要过滤的数据范围缩小。比如,通过分区表的方式,在主库对数据进行预处理,减少进入复制通道的数据量,进而减轻过滤器的压力。
- 优化主库性能:确保主库有足够的资源(CPU、内存、磁盘I/O等),高效地生成二进制日志。因为过滤器在从库应用日志时,主库生成日志的速度也会影响整个复制过程。
- 从库硬件优化:为从库配置合适的硬件资源,特别是在使用过滤器后,从库处理复制数据的负载可能会有变化,保证从库有足够的CPU和内存来快速处理过滤后的日志。
- 定期清理从库中继日志:及时清理从库上已经应用过的中继日志,避免磁盘空间占用过多影响性能,同时也有助于提高从库的I/O效率。
处理主从数据冲突的方法
- 查看错误日志:当出现数据冲突时,首先查看从库的错误日志(一般在
data
目录下的hostname.err
文件),从中获取详细的冲突信息,如冲突涉及的表、操作类型(INSERT、UPDATE、DELETE)以及具体的错误原因。 - 停止复制并修复数据:在从库上执行
STOP SLAVE;
停止复制,根据冲突信息进行数据修复。例如,如果是主键冲突,需要确定哪个数据是正确的,然后在主库或从库上修正数据,确保数据一致性。 - 跳过错误事件:如果确认冲突的事件可以跳过,可以在从库上使用
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
跳过当前导致冲突的事件,然后执行START SLAVE;
重新启动复制。但这种方法要谨慎使用,因为跳过事件可能会导致数据丢失或不完整。 - 重新搭建从库:如果冲突情况较为复杂,难以通过简单修复解决,可以考虑重新搭建从库。先在主库上执行
FLUSH TABLES WITH READ LOCK;
并记录SHOW MASTER STATUS;
的结果,然后在从库上进行数据全量备份恢复,再基于主库记录的位置配置复制。完成后在主库上执行UNLOCK TABLES;
释放锁。 - 使用半同步复制:配置半同步复制可以减少主从数据冲突的概率。半同步复制要求从库接收到并写入中继日志后,主库才确认事务提交,这样可以保证主从数据在一定程度上的一致性。