如何解决MySQL主从同步的延时问题?
MySQL查看数据库运行状态:show status;
可以看到Seconds_Behind_Master这个信息,是slave落后master的秒数,我们可以通过Seconds_Behind_Master数字查看slave是否落后master。
其实这块东西我们经常会碰到,就比如说用了mysql主从架构后,可能会发现,刚写入库的数据结果没查到,结果就完蛋了。
(1) 产生所谓的主从延迟主要是看主库的写并发
(2) 主库的写并发达到1000/s,从库的延迟会有几ms
(3) 主库的写并发达到2000/s,从库的延迟会有几十ms
(4) 主库的写并发达到4000/s,从库的延迟会达到几秒
所以实际上你要考虑应该在什么场景下来使用这个mysql主从同步,建议是一般在读远远多于写,而且读的时候一般对数据时效性要求没那么高的时候,用mysql主从同步。
所以这个时候,我们可以考虑的一个事情就是,你可以用mysql的并行复制,但是问题是那是库级别的并行,所以有时候作用不是很大。
所以我们会对于那种写了之后立马就要保证可以查到的情景,采用强制读取主库的方式,这样就可以保证一定可以读到数据,这个操作用数据库中间件是可以实现的。
总结:
一般来说,如果主从延时较为严重:
(1) 分库,将一个主库拆分为4个主库,每个主库的写并发就500/s,此时主从延迟可以忽略不计。
(2) 打开mysql支持的并行复制,多个库并行复制,如果说某个库的写入并发就是特别高,单库写并发达到了2000/s,并行复制还是没意义。28法则,很多时候比如说,就是少数的几个订单表,写入了2000/s,其他几十个表10/s。
(3) 如果确实是存在必须先插入,立马要求就查询到,然后立马就要反过来执行一些操作,对这个查询设置直连主库。不过不推荐这种方法,因为这样子读写分离的意义就丧失了。