数据库读写分离,主从 读写分离( 二 )


读写分离会带来的问题之前的文章,我也反复强调过,任何的架构、软件、框架、组件...在解决一部分问题的时候,一定会带来其他的问题;读写分离最大的一个问题就是,数据从主复制到从的过程中,可能会存在延迟的,如果客户端在执行完一个读操作后,立刻从存库中查询的话,可能会读取到旧数据的情况(我们不断优化,也只能缩短这个时间,并不能完全消除掉这个时间) 。
那么针对这个问题,有哪些处理方法呢?根据具体场景进行评估,是否可以接收这个延迟(这好像是一句废话,但是大多数业务场景,是可以接收这点儿延迟的);对于实时性要求很高的场景(查询的数据必须是最新的结果),将这些请求强制路由到主库上;执行完写操作之后,在读操作发生之前,让中间的时间变长(也就是从业务操作角度来做一些控制,不一定操作完了立刻查询);判断主备无延迟,可以通过判断seconds_behind_master参数、对比GTID、对比位点等方式,判断从数据库是否和主数据库一致 。
今天发生了一件有趣的事情,昨天搭建测试数据库主从读写分离,随便建了个库傻瓜式的密码,今天到公司发现Slave主机数据库没了,多出来一个之前没有,只有一个字段两条数据,翻译一下意思是我的数据库被他们备份了,要我支付比特币购买,否则就把数据放到黑市去出售,搞笑了,表里就一条张三的数据,价值3w? 。

推荐阅读