MySql主从架构下,如何保证读取到最新的数据?

MySql主从架构下,如何保证读取到最新的数据?_第1张图片

以上是目前比较主流的数据库架构:一主一备多从。

1.问题

由于主从可能存在延迟,客户端执行完一个更新事务后马上发起查询,如果查询选择的是从库的话,就有可能读到刚刚的事务更新之前的状态。

2.解决方案

(1)由业务开发自己评估,如果对主从延迟不敏感则读从库,如果对主从延迟敏感,则读主库,这个是平时使用较多的方案;

(2)等主库DTID方案:就是在主库执行完写操作之后会返回一个GTID,然后等从库执行完这个DTID之后再执行查询操作,方案的具体执行步骤如下:

trx1 事务更新完成后,从返回包直接获取这个事务的 GTID,记为 gtid1;

选定一个从库执行查询语句;

在从库上执行 select wait_for_executed_gtid_set(gtid1, 1);

如果返回值是 0,则在这个从库执行查询语句;

否则,到主库执行查询语句。

你可能感兴趣的:(mysql,架构,数据库)