MySQL一主多从时如何保证从库读到的数据是最新的?
等主库位点方案
- 主库事务更新后,马上执行show master status得到当前主库执行的File和position;
- 选定一个从库执行查询操作;
- 在从库上执行 select master_pos_wait(File, position, 1);其中1是timeout1s;该命令返回的是一个正整数,超时返回-1,错误返回NULL。
- 如果返回值>=0,则在从库执行查询语句; 否则,说明还没同步完成,到主库执行查询。
GTID法–数据库需要开启gtid方案
- 事务更新完成以后,从返回包中直接获取这个事务的GTID,记为gtid1;
- 选定一个从库执行查询操作;
- 在从库上执行select wait_for_executed_gtid_set(gtid1, 1);
- 如果返回值是0,则说明同步完成,否则到主库执行查询;