情景再现
如果你负责开发一套cms系统,经过测试人员的专业测试与运营测试,确认有问题后进行上线。该系统上线半年内都没有问题出现,突然有一天运营过 来跟你反馈,他发布的资讯文章看不到,而昨天的文章还都在。
你收到反馈后, 立即着手进行检查,首先看下服务器程序日志,确认设有问题,然后你自己也对运营发布的内容进行了操作,发现数据库有新记录成就是不显示当前记录,你与运维确认过服务器没有黑客攻击,或者人为升级程序。请问运营同事反馈的这个问题可能是什么原因?如何进行排查解决?
产生原因
以上情景只有主库和备库的同步延迟问题可以解释。(如果前边没有测试的话也可能是没有执行commit()方法)
原因解释
原因解释如下:
- 使用 update ,进入的是主库;
- sql 读的是路由到主库的数据(动态路由);
- java 线程读的是从库(备库),并没有完成同步;
- java 程序最终读的是从库,数据库已同步。
总结:
由于动态路由的存在,数据延迟未同步到数据库,从而出现了 MySQL 数据库插入时有新纪录生成,但是不显示这条记录的现象。