情景再現
如果你負責開發一套cms系統,經過測試人員的專業測試與運營測試,確認有問題後進行上線。該系統上線半年內都沒有問題出現,突然有一天運營過 來跟你反饋,他發佈的資訊文章看不到,而昨天的文章還都在。
你收到反饋後, 立即着手進行檢查,首先看下服務器程序日誌,確認設有問題,然後你自己也對運營發佈的內容進行了操作,發現數據庫有新記錄成就是不顯示當前記錄,你與運維確認過服務器沒有黑客攻擊,或者人爲升級程序。請問運營同事反饋的這個問題可能是什麼原因?如何進行排查解決?
產生原因
以上情景只有主庫和備庫的同步延遲問題可以解釋。(如果前邊沒有測試的話也可能是沒有執行commit()方法)
原因解釋
原因解釋如下:
- 使用 update ,進入的是主庫;
- sql 讀的是路由到主庫的數據(動態路由);
- java 線程讀的是從庫(備庫),並沒有完成同步;
- java 程序最終讀的是從庫,數據庫已同步。
總結:
由於動態路由的存在,數據延遲未同步到數據庫,從而出現了 MySQL 數據庫插入時有新紀錄生成,但是不顯示這條記錄的現象。