数据采集平台业务数据库由于批量灌数据导致主从延迟上万秒。
复制线程长期处于Queueing master event to the relay log状态。
mysql> show variables where variable_name in('slave_parallel_workers','read_only', 'master_info_repository','relay_log_info_repository','slave_net_timeout','log_slave_updates', 'slave_compressed_protocol','sync_master_info','sync_relay_log','sync_relay_log_info','relay_log_purge');
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| log_slave_updates | ON |
| master_info_repository | FILE |
| read_only | OFF |
| relay_log_info_repository | FILE |
| relay_log_purge | OFF |
| slave_compressed_protocol | ON |
| slave_net_timeout | 10 |
| slave_parallel_workers | 6 |
| sync_master_info | 1 |
| sync_relay_log | 10000 |
| sync_relay_log_info | 10000 |
+---------------------------+-------+
检查发现:master_info_repository设置为FILE,同时sync_master_info设置为1。
这两个参数组合起来的意思就是slave要同步每一个sync_master_info events 到 master.info文件中。由于磁盘的性能问题,导致fdatasync()的效率比较低, 所以引起复制延迟。解决办法
把master_info_repository设置为table后,主从延迟直线下降。
stop slave;set global relay_log_info_repository=table;set global master_info_repository=table;start slave;官方文档中对master_info_repository参数的说明
https://dev.mysql.com/doc/refman/5.6/en/replication-options-slave.html#sysvar_sync_master_info