亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

微信店獎(jiǎng)Mysql表?yè)p壞問題復(fù)盤

IT那活兒 / 2406人閱讀
微信店獎(jiǎng)Mysql表?yè)p壞問題復(fù)盤

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



問題發(fā)生時(shí)間

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


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

2022年1月3日9:00

問題解決時(shí)間

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


問題復(fù)盤時(shí)間

2022年1月6日10:00


問題發(fā)生背景

因需要對(duì)微信店獎(jiǎng)系統(tǒng)創(chuàng)建用戶,但在創(chuàng)建用戶時(shí)收到Mysql.user表?yè)p壞問題報(bào)錯(cuò)。

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


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

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






問題解決過(guò)程



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

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

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

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

3. 嘗試修復(fù)表

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

4. 嘗試重建Mysql.db表

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

5. 嘗試賦權(quán)

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

6. 主從同步斷開

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

7. 嘗試升級(jí)(mysql_upgrade)

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

8. 主從同步錯(cuò)誤

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

9. 從庫(kù)重建Mysql.user表

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

10. 從庫(kù)手動(dòng)跳過(guò)該錯(cuò)誤

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

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

目前只有業(yè)務(wù)數(shù)據(jù)庫(kù)同步正常,系統(tǒng)表主從同步仍然有問題。
圖十九 
在主庫(kù)建用戶,會(huì)導(dǎo)致從庫(kù)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)建測(cè)試用戶成功。
圖二十一 
到Mysql軟件目錄運(yùn)行mysql_upgrade成功,創(chuàng)建測(cè)試用戶成功






事后分析



1. Mysql.user表引擎問題

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

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

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

3. Mysql表?yè)p壞問題修理思路

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



本文作者:葉順龍

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/129635.html

相關(guān)文章

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

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

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

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

    haobowd 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<