Mysql主从延时的问题

我的代码实现场景:批量插入数据,每一个插入都是一个事务,事务有两个操作。

  1. 插入数据并获得主键;
  2. 根据主键立刻取查询。

这个case其实很简单,基本上在我们数据库上跑是没问题的,我也测试了很多遍。

但在线上有时会有问题。比如我插入了数据获得主键,再插入数据,就提示获取不到数据。

后来经过研究发现,找到了原因:

我们的Mysql采用的是master-slave集群,一主多从,主库负责写,其他库只读。前面还会有一个公司的数据库proxy,proxy负责路由到哪个库。主库同步数据到从库是有一定时间的延时的。如果在程序中,我写完数据,立刻去查,很有可能从库的数据还没同步过来,就会导致出现这种问题。

解决方法有两种:

  1. 暴力方法。直接在第一步执行完之后,sleep(0.5),因为我们的是定时任务,要求不高,因此可以满足;
  2. 第二种方法,就是在我的select语句加上注释:/*master*/,这样显示得标注出来,proxy就会直接读主库,而不是从库。

--------EOF---------
本文微信分享/扫码阅读