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

資訊專欄INFORMATION COLUMN

微信店獎Mysql表損壞問題復(fù)盤

IT那活兒 / 2368人閱讀
微信店獎Mysql表損壞問題復(fù)盤

點(diǎn)擊上方“IT那活兒”,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!



問題發(fā)生時間

目前無法確定,猜想原因?yàn)闅v史某次Mysql升級數(shù)據(jù)字典導(dǎo)致。


問題發(fā)現(xiàn)時間

2022年1月3日9:00

問題解決時間

2022年1月5日10:40至2022年1月6日1:30


問題復(fù)盤時間

2022年1月6日10:00


問題發(fā)生背景

因需要對微信店獎系統(tǒng)創(chuàng)建用戶,但在創(chuàng)建用戶時收到Mysql.user表損壞問題報(bào)錯。

當(dāng)晚在嘗試進(jìn)行修復(fù)時操作出現(xiàn)若干未預(yù)期報(bào)錯,導(dǎo)致總體修復(fù)過程較長。故在此對整個修復(fù)過程進(jìn)行復(fù)盤,并試圖重新梳理問題邏輯。


問題發(fā)生負(fù)面影響

除無法創(chuàng)建用戶外,業(yè)務(wù)數(shù)據(jù)庫DDL、DML操作不受影響,應(yīng)用運(yùn)行正常。






問題解決過程



1. 發(fā)現(xiàn)無法創(chuàng)建用戶

白天首次創(chuàng)建用戶時,收到Mysql.user表損壞問題報(bào)錯。
圖一 
創(chuàng)建用戶時收到Mysql.user表損壞問題報(bào)錯
于是白天對數(shù)據(jù)庫中其他業(yè)務(wù)操作進(jìn)行測試,發(fā)現(xiàn)本次問題僅影響用戶創(chuàng)建,不影響用戶登錄,表查詢/修改/刪除等。因此在測試環(huán)境對Mysql.user表進(jìn)行重建,確定重建過程不影響業(yè)務(wù)時,決定申請停應(yīng)用對表進(jìn)行重建。

2. 重建表后仍然報(bào)錯

當(dāng)晚為重建Mysql.user表準(zhǔn)備了三套方案。第一套為「查詢表結(jié)構(gòu)-創(chuàng)建備份表-刪除表后導(dǎo)入備份表」,第二套為「mysqldump出單表-刪表表后導(dǎo)入dump出的.sql文件」,第三套為「從同Mysql版本的其他庫mysqldump出單表-在本庫刪表表后導(dǎo)入dump出的.sql文件」。
實(shí)際操作中,使用過前兩種方法后,直接再次創(chuàng)建用戶時仍會收到Mysql.user表損壞問題報(bào)錯(期間嘗試重啟數(shù)據(jù)庫,同樣不影響報(bào)錯內(nèi)容)。嘗試第三種方法后,獲得了新的報(bào)錯:Mysql.db表損壞。
圖二
創(chuàng)建用戶時收到Mysql.db表損壞問題報(bào)錯

3. 嘗試修復(fù)表

收到表損壞報(bào)錯后,嘗試修復(fù)表(使用repair table語句)。
圖三 
修復(fù)后查看Mysql.user表狀態(tài)
圖四 
修復(fù)后查看Mysql.db表狀態(tài)
但運(yùn)行創(chuàng)建用戶語句仍會收到報(bào)錯。
圖五 
創(chuàng)建用戶時仍收到Mysql.db表損壞問題報(bào)錯

4. 嘗試重建Mysql.db表

于是仿照重建Mysql.user表的步驟,嘗試重建Mysql.db表。
圖六 
重建Mysql.db表后創(chuàng)建用戶時仍收到Mysql.db表損壞問題報(bào)錯

5. 嘗試賦權(quán)

嘗試為查詢Mysql.db表賦予權(quán)限,但收到了新的報(bào)錯:Mysql.tables_priv表損壞。使用修復(fù)表之后同樣失敗。
圖七 
為查詢Mysql.db表賦予權(quán)限收到了新的報(bào)錯:Mysql.tables_priv表損壞

6. 主從同步斷開

在嘗試修復(fù)期間,主從同步斷開,核查后原因?yàn)閺膸斓街鲙?306端口不通,開放端口后問題恢復(fù)。

7. 嘗試升級(mysql_upgrade)

第一次運(yùn)行mysql_upgrade報(bào)錯,但可以正常執(zhí)行上一步的賦權(quán)語句。
圖八 
第一次運(yùn)行mysql_upgrade報(bào)錯,但執(zhí)行賦權(quán)語句成功
第二次加入--force選項(xiàng),再次運(yùn)行,可以進(jìn)行用戶創(chuàng)建。
圖九 
第二次運(yùn)行mysql_upgrade(--force)成功,同時創(chuàng)建用戶成功

8. 主從同步錯誤

在主庫完成upgrade操作的同時,從庫再次報(bào)錯。
圖十 
主從同步報(bào)錯
嘗試模仿主庫操作,在從庫進(jìn)行mysql_upgrade,但收到了另一個報(bào)錯。
圖十一 
mysql_upgrade失敗報(bào)錯
嘗試停止slave進(jìn)程之后,繼續(xù)升級,仍然報(bào)錯。
圖十二 
停止slave之后mysql_upgrade仍然失敗報(bào)錯
查看錯誤日志后發(fā)現(xiàn),升級錯誤沒有寫入到日志中。
圖十三 
日志中沒有報(bào)錯信息
嘗試在數(shù)據(jù)庫參數(shù)中增加skip-grant-tables,重啟起庫后再次升級,仍然失敗。
圖十四 
在數(shù)據(jù)庫參數(shù)中增加skip-grant-tables,重啟起庫后再次升級,仍然失敗

9. 從庫重建Mysql.user表

嘗試在從庫重建Mysql.user表,表信息來自主庫dump結(jié)果。
圖十五 
在從庫重建Mysql.user表
但仍然無法正常運(yùn)行slave進(jìn)程。

10. 從庫手動跳過該錯誤

分析后確定,這套主從都是全同步的,按道理升級數(shù)據(jù)字典,跑一邊就好,現(xiàn)在可以直接跳過當(dāng)前這個錯誤日志。
stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;
圖十六 
期間出現(xiàn)的報(bào)錯
連續(xù)執(zhí)行上述語句三次之后,跳過所有報(bào)錯,主從同步恢復(fù)正常。
圖十七 
主從同步恢復(fù)正常
檢查業(yè)務(wù)表同步情況后,結(jié)果正常。(數(shù)據(jù)表大小相同,測試表創(chuàng)建刪除正常同步)
圖十八 
業(yè)務(wù)測試主從同步恢復(fù)正常

11. 系統(tǒng)表主從同步錯誤

目前只有業(yè)務(wù)數(shù)據(jù)庫同步正常,系統(tǒng)表主從同步仍然有問題。
圖十九 
在主庫建用戶,會導(dǎo)致從庫slave掛掉

12. Mysql默認(rèn)環(huán)境變量問題

次日核查后,最終確定為Mysql默認(rèn)環(huán)境變量問題。使用which mysql得到的并不是當(dāng)前mysql實(shí)例的位置。
圖二十 
使用which mysql得到的并不是當(dāng)前mysql實(shí)例的位置
于是到Mysql軟件目錄運(yùn)行mysql_upgrade成功,創(chuàng)建測試用戶成功。
圖二十一 
到Mysql軟件目錄運(yùn)行mysql_upgrade成功,創(chuàng)建測試用戶成功






事后分析



1. Mysql.user表引擎問題

5.7.x版本下,Mysql的user表默認(rèn)使用MYISAM引擎,該引擎存在這種表容易損壞的故障。以后升級可以考慮選擇升級8.0。

2. Mysql主從同步設(shè)置

Mysql主從同步可以考慮只同步業(yè)務(wù)數(shù)據(jù)庫,即排除系統(tǒng)表。

3. Mysql表損壞問題修理思路

  • 首先,嘗試使用repair table xxx進(jìn)行修復(fù)。
  • 如果第一步失敗,嘗試導(dǎo)出重建表。
  • 如果第二步失敗,嘗試手動運(yùn)行mysql_upgrade進(jìn)行升級。
    如果第三步失敗,嘗試重新初始化(僅針對從庫)。



本文作者:葉順龍

本文來源:IT那活兒(上海新炬王翦團(tuán)隊(duì))

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

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

相關(guān)文章

  • MySQL 復(fù)制 - 性能與擴(kuò)展性的基石 3:常見問題及解決方案

    摘要:問題原因非正常關(guān)機(jī)導(dǎo)致沒有把數(shù)據(jù)及時的寫入硬盤。丟失的臨時表臨時表和基于語句的復(fù)制方式不相容。如果備庫崩潰或者正常關(guān)閉,任何復(fù)制線程擁有的臨時表都會丟失。臨時表的特性只對創(chuàng)建臨時表的連接可見。 主備復(fù)制過程中有很大可能會出現(xiàn)各種問題,接下來我們就討論一些比較普遍的問題,以及當(dāng)遇到這些問題時,如何解決或者預(yù)防問題發(fā)生。 1 數(shù)據(jù)損壞或丟失 問題描述:服務(wù)器崩潰、斷電、磁盤損壞、內(nèi)存或網(wǎng)絡(luò)...

    canopus4u 評論0 收藏0
  • MySQL 復(fù)制 - 性能與擴(kuò)展性的基石 3:常見問題及解決方案

    摘要:問題原因非正常關(guān)機(jī)導(dǎo)致沒有把數(shù)據(jù)及時的寫入硬盤。丟失的臨時表臨時表和基于語句的復(fù)制方式不相容。如果備庫崩潰或者正常關(guān)閉,任何復(fù)制線程擁有的臨時表都會丟失。臨時表的特性只對創(chuàng)建臨時表的連接可見。 主備復(fù)制過程中有很大可能會出現(xiàn)各種問題,接下來我們就討論一些比較普遍的問題,以及當(dāng)遇到這些問題時,如何解決或者預(yù)防問題發(fā)生。 1 數(shù)據(jù)損壞或丟失 問題描述:服務(wù)器崩潰、斷電、磁盤損壞、內(nèi)存或網(wǎng)絡(luò)...

    haobowd 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

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