成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

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

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



問題發(fā)生時間

目前無法確定,猜想原因為歷史某次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表損壞問題報錯。

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


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

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






問題解決過程



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

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

2. 重建表后仍然報錯

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

3. 嘗試修復(fù)表

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

4. 嘗試重建Mysql.db表

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

5. 嘗試賦權(quán)

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

6. 主從同步斷開

在嘗試修復(fù)期間,主從同步斷開,核查后原因為從庫到主庫3306端口不通,開放端口后問題恢復(fù)。

7. 嘗試升級(mysql_upgrade)

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

8. 主從同步錯誤

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

9. 從庫重建Mysql.user表

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

10. 從庫手動跳過該錯誤

分析后確定,這套主從都是全同步的,按道理升級數(shù)據(jù)字典,跑一邊就好,現(xiàn)在可以直接跳過當(dāng)前這個錯誤日志。
stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave ;
圖十六 
期間出現(xiàn)的報錯
連續(xù)執(zhí)行上述語句三次之后,跳過所有報錯,主從同步恢復(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默認環(huán)境變量問題

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






事后分析



1. Mysql.user表引擎問題

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

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

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

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

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



本文作者:葉順龍

本文來源:IT那活兒(上海新炬王翦團隊)

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

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

相關(guān)文章

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

    摘要:問題原因非正常關(guān)機導(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ù)制 - 性能與擴展性的基石 3:常見問題及解決方案

    摘要:問題原因非正常關(guān)機導(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元查看
<