我们知道生产环境中经常会遇到MySQL主从延迟问题,从原理上也能看出主库的事务提交是并发模式,而从库只有一个SQL线程负责解析,所以本身上就可能存在延迟。
延迟的主要原因在于:
1、从库的配置往往没有主库的配置高
2、主库支持并发写入,而5.7之前的版本上从库只有单线程SQL来完成任务。
3、MySQL主从之间的同步,并不是完全的实时同步,而是主库提交事务之后,从库才再来执行一遍
4、主库上的表的某个列没有索引,然后对这个列进行delete或update操作
5、网络问题,往返时延RTT较大。
解决方案如下:
1、使用MySQL5.7版本,MySQL5.7版本后引入新的机制,即基于组提交的并行复制,设置参数slave_parallel_workers的值大于0,还有一个参数slave_parallel_type='LOGICAL_CLOCK'。
。MySQL [fruit]> show variables like '%parallel%';
+------------------------+----------+
| Variable_name | Value |
+------------------------+----------+
| slave_parallel_type | DATABASE |
| slave_parallel_workers | 0 |
+------------------------+----------+
2 rows in set (0.00 sec)
上面这个是没有修改的例子而已。仅仅是为了展示
2、可以采用percona公司的PXC架构,实现多节点写入,达到时时同步
3、在业务初期就选择合适的分库、分表策略,避免单表单库过大带来额外的复制压力。
4、避免一些无用的I/O消耗,使用PCIE-SSD硬盘
5、磁盘阵列选择RAID10架构,raid cache策略使用WB而非WT
6、适当调整buffer pool的大小
7、避免数据库进行各种大量的运算。