关于因主库写数据压力大而导致mysql主从延迟的解决方案

########################################

读流量很大,可以通过添加从库就比较容易解决,但是如果主库写压力很大,那么势必造成从库的sql线程来不及消化那么多写数据,这时候,就会有一个问题了,从库来不及消化,就必然造成主从延迟较大。

1)考虑去掉从库写binlog,将两个参数配置为0

2)可考虑多主架构,缺点是多主架构的维护相当不好维护。

3)通过redis更高的实时性来保证读取最新的数据

4)设置读写全走主库:设置读写全走主库后能保证读写的数据肯定是最新的,不存在延时问题,但是也存在缺点:

1、主库要承受所有读写,主库性能容易上升到瓶颈;

2、读写全走主库后,从库就成了冷备,资源没有实现最大价值,而且如果长期冷备,某天提升为主库的话,可能会发现一些数据不一致或者其他问题导致无法使用,如果一直在用的话这些问题可能会提前发现。

5)设置主从同步为半同步复制,这个可以尝试,但是也不能保证数据100%的一致性,而且半同步会影响主库的变更效率。

6)支持SQL强制走主的方法,如:select /*master*/ xxx from mysqtable where order_id='yyy';数据库代理会将该条SQL发给主库,保证查到到的数据是最新的。这个对于开发人员的改动比较小,但缺点:对于开发来说那些sql走主,那些走从,需要有一定的梳理成本,否则容易错乱,引起不必要的问题;

 综上所述:MySQL主从的实时性在绝大多数场景下都是可以保证的,但是遇到比如特殊的场景,如:下单、注册信息这些需要及时返回数据的场景,如果需要更高的实时性可以强制走主或者采用Redis来进行解决,对于公司而言,尽量避免大成本的改造,从后端简单的强制走主代码改造去入手。

 

 

 

 

 

 

 

#####

######################################

posted @ 2021-08-18 21:18  igoodful  阅读(322)  评论(0编辑  收藏  举报