成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【踩坑記錄】記一次MySQL主從復(fù)制延遲的坑

cartoon / 1122人閱讀

摘要:最近開發(fā)中遇到的一個主從延遲的坑,記錄并總結(jié),避免再次犯同樣的錯誤。運行時查詢?yōu)榭眨瑘?zhí)行完畢后查詢時內(nèi)容存在,初步懷疑是主從延遲問題。報錯只是部分失敗,確定是主從延遲的問題。接下來,會去學(xué)習(xí)主從復(fù)制的原理,敬請期待。

最近開發(fā)中遇到的一個MySQL主從延遲的坑,記錄并總結(jié),避免再次犯同樣的錯誤。

情景

一個活動信息需要審批,審批之后才能生效。因為之后活動要編輯,編輯后也可能觸發(fā)審批,審批中展示的是編輯前的活動內(nèi)容,考慮到字段比較多,也要保存審批活動的內(nèi)容,因此設(shè)計采用了一張臨時表,審批中的活動寫進審批表(activity_tmp),審批通過之后才把真正的活動內(nèi)容寫進活動表(activity)。表的簡要設(shè)計如下,這里將活動內(nèi)容字段合并為content展示:

activity_tmp()
id
status // 審批狀態(tài)    
content //  審批階段提交的活動內(nèi)容

activity
id
content // 審批通過后真正展示的活動內(nèi)容
遇到的問題

當(dāng)時是有編輯觸發(fā)審批的情況,發(fā)現(xiàn)審批通過之后活動內(nèi)容是空的,于是開始追查問題的原因。這里說一句,當(dāng)程序出問題的時候,95%都是代碼的問題,先不要去懷疑環(huán)境出問題。好好的查日志,然后看看你的代碼吧。

追查問題回溯

1、查activity_tmp表,發(fā)現(xiàn)當(dāng)時提交審批的活動內(nèi)容是正常的,而且狀態(tài)也更新為審批通過了,懷疑是寫入activity表失敗
2、查activity表,發(fā)現(xiàn)審批后的內(nèi)容確實沒有寫入,懷疑是代碼問題
3、查看代碼,代碼邏輯沒看出問題,懷疑數(shù)據(jù)庫操作失敗,查看日志
4、日志顯示,有一句insert語句的活動內(nèi)容為空,活動內(nèi)容來自上一個mysql執(zhí)行的是select語句,把該select語句拿出來放到線上的備庫查詢,發(fā)現(xiàn)活動內(nèi)容是存在的。運行時查詢?yōu)榭?,?zhí)行完畢后查詢時內(nèi)容存在,初步懷疑是主從延遲問題。
5、報錯只是部分失敗,確定是主從延遲的問題。

當(dāng)時的問題代碼
$intStatus = $arrInput[‘status’];
$this->objActTmp->updateInfoByAId($intActId, $intStatus);
// 更新后,馬上查
$arrActContent = $this->objActTmp->getActByStatus($intStatus);

這就是主從延遲出現(xiàn)的地方,update后,馬上get,這是主從復(fù)制架構(gòu)上開發(fā)的一個大忌。

解決方案

這類問題的解決方案有兩種:

修改代碼邏輯

修改系統(tǒng)架構(gòu)

對于修改代碼邏輯,鄙人有兩點見解:

如果第二步獲取的數(shù)據(jù)不需要第一步更新的status字段,那就先讀,然后再更新

如果第二步獲取的數(shù)據(jù)需要依賴第一步的status字段,那就在讀出來的時候先判斷是否為空,如果是空的,報錯,下一次重試。

總結(jié)

其實之前也聽到過這樣的例子,但是由于沒有親身經(jīng)歷,所以只保留了一種理論上的記憶,實際上印象不深,經(jīng)歷了這么一次踩坑后,印象特別深刻,現(xiàn)在看到別人寫這樣的代碼也能馬上發(fā)現(xiàn)并指出。還是自己親身去踩坑印象最深。

日志很重要,詳細的日志更重要。日志要記錄有用的信息,方便追查問題的時候去追溯問題的本質(zhì)原因。我覺得日志就應(yīng)該盡量做成飛機中的黑匣子,幫助我們保存“事故“發(fā)生時的所有相關(guān)信息。

接下來,會去學(xué)習(xí)主從復(fù)制的原理,敬請期待。

更多精彩內(nèi)容,請關(guān)注個人公眾號。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23224.html

相關(guān)文章

  • SegmentFault 技術(shù)周刊 Vol.42 - MySQL:從刪庫到跑路

    摘要:肖鵬微博數(shù)據(jù)庫那些事兒肖鵬,微博研發(fā)中心技術(shù)經(jīng)理,主要負責(zé)微博數(shù)據(jù)庫相關(guān)的業(yè)務(wù)保障性能優(yōu)化架構(gòu)設(shè)計,以及周邊的自動化系統(tǒng)建設(shè)。經(jīng)歷了微博數(shù)據(jù)庫各個階段的架構(gòu)改造,包括服務(wù)保障及體系建設(shè)微博多機房部署微博平臺化改造等項目。 showImg(https://segmentfault.com/img/bV24Gs?w=900&h=385); 對于手握數(shù)據(jù)庫的開發(fā)人員來說,沒有誤刪過庫的人生是...

    aboutU 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<