国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微信店獎Mysql表損壞問題復盤

IT那活兒 / 2358人閱讀
微信店獎Mysql表損壞問題復盤

點擊上方“IT那活兒”,關注后了解更多內容,不管IT什么活兒,干就完了!!!



問題發生時間

目前無法確定,猜想原因為歷史某次Mysql升級數據字典導致。


問題發現時間

2022年1月3日9:00

問題解決時間

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


問題復盤時間

2022年1月6日10:00


問題發生背景

因需要對微信店獎系統創建用戶,但在創建用戶時收到Mysql.user表損壞問題報錯。

當晚在嘗試進行修復時操作出現若干未預期報錯,導致總體修復過程較長。故在此對整個修復過程進行復盤,并試圖重新梳理問題邏輯。


問題發生負面影響

除無法創建用戶外,業務數據庫DDL、DML操作不受影響,應用運行正常。






問題解決過程



1. 發現無法創建用戶

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

2. 重建表后仍然報錯

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

3. 嘗試修復表

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

4. 嘗試重建Mysql.db表

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

5. 嘗試賦權

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

6. 主從同步斷開

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

7. 嘗試升級(mysql_upgrade)

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

8. 主從同步錯誤

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

9. 從庫重建Mysql.user表

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

10. 從庫手動跳過該錯誤

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

11. 系統表主從同步錯誤

目前只有業務數據庫同步正常,系統表主從同步仍然有問題。
圖十九 
在主庫建用戶,會導致從庫slave掛掉

12. Mysql默認環境變量問題

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






事后分析



1. Mysql.user表引擎問題

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

2. Mysql主從同步設置

Mysql主從同步可以考慮只同步業務數據庫,即排除系統表。

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

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



本文作者:葉順龍

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129635.html

相關文章

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

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

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

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

    haobowd 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

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