为了实现数据库的高可用,一般需要搭建数据库集群,即所谓的n主n从的数据库结构。主库主要用作对数据库的写操作,然后再同步给从库;从库主要用作对数据的查询。
对主库的数据的更新操作时,数据的变更会同步给从库。这段同步的时间就是主从延迟。
主从延迟时间一般非常短,一般在1ms左右。主从延迟是不可控的,不能杜绝,也不知道在同步过程会发生什么。如果主从同步过程中其他的请求进来查询从库取的就是脏数据。
但是大部分业务几乎是可以忽略这个主从延迟,因为主从延迟时间非常之短。但是如果你的系统并发量非常高,并且需要保证数据是绝对的安全与正确,那只能牺牲性能来得到数据的保证了。
解决办法:
1.如果业务量不大,那就所有读写操作都从主库读取,从库只用作冷备。
2.打开主从数据库的强一致性协议。主从同步默认的是异步方式,即在主库数据更新后就立即返回给客户端成功状态,不用管从库是否同步完成。
打开Semi-sync(半同步),即在主库数据更新后,然后同步给从库。若从库同步完成再返回给客户端请求完成的状态。
打开主从的半同步命令
master: