欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL磁盤壞塊處理的全流程

 更新時(shí)間:2025年07月22日 09:58:01   作者:喝醉酒的小白  
當(dāng) MySQL 所在磁盤出現(xiàn)壞塊(Bad Sector),可能導(dǎo)致數(shù)據(jù)庫(kù)實(shí)例異常重啟、表?yè)p壞、數(shù)據(jù)無(wú)法讀取或?qū)懭氲葒?yán)重問題,此類問題不僅涉及 MySQL 層處理,還需配合操作系統(tǒng)和硬件層面進(jìn)行綜合判斷與修復(fù),所以本文給大家介紹了MySQL磁盤壞塊處理的全流程

MySQL 磁盤壞塊問題的處理總體流程

下面是推薦的分階段處理流程,適用于生產(chǎn)環(huán)境,強(qiáng)調(diào)數(shù)據(jù)保護(hù)、風(fēng)險(xiǎn)評(píng)估、逐步推進(jìn):

第一階段:?jiǎn)栴}確認(rèn)與隔離

1.1 檢查 MySQL 日志確認(rèn)癥狀

查看 mysqld.err 或 MySQL 日志是否存在以下關(guān)鍵詞:

  • InnoDB: Operating system error number 5
  • InnoDB: Unable to read page
  • InnoDB: corruption
  • Got error -1 from storage engine
  • IO error 5 / IO error 13
  • 實(shí)例崩潰、自動(dòng)重啟堆棧信息(signal 11)

1.2 確認(rèn)是否磁盤 I/O 層問題

使用如下工具:

dmesg | grep -i error
dmesg | grep -i sda  # 根據(jù)你使用的磁盤設(shè)備

重點(diǎn)關(guān)注如:

Buffer I/O error on device /dev/sda3, logical block 123456
EXT4-fs error (device sda3): ...

第二階段:應(yīng)急保護(hù)與備份

2.1 立即備份其他健康數(shù)據(jù)

  • 使用 mysqldump、xtrabackupcp 等方式備份未受影響的庫(kù)/表。
  • 防止壞塊擴(kuò)大損害。

2.2 停止寫入請(qǐng)求

可通過 FLUSH TABLES WITH READ LOCK; 鎖定全局讀取;

或直接將 MySQL 實(shí)例切換為只讀:

SET GLOBAL read_only = ON;

第三階段:診斷壞塊位置與影響

3.1 使用 badblocks 工具檢測(cè)磁盤壞塊

badblocks -sv /dev/sda > badblocks.txt
  • 可配合 fscke2fsck 使用映射壞塊文件排查表空間損壞。

3.2 確認(rèn)受損數(shù)據(jù)文件位置(特別是 .ibd 文件)

ls -lh /var/lib/mysql/databasename/
file /var/lib/mysql/databasename/table.ibd

可配合 strace -f -p $(pidof mysqld) 跟蹤是否某個(gè) .ibd 文件訪問時(shí)報(bào)錯(cuò)。

第四階段:修復(fù)受影響表或表空間

4.1 若只影響單表,可嘗試以下修復(fù)操作:

方法A:導(dǎo)出可導(dǎo)出的數(shù)據(jù)后刪除表

SELECT * FROM problem_table INTO OUTFILE '/tmp/backup.csv';
TRUNCATE TABLE problem_table;
DROP TABLE problem_table;

方法B:將表移出數(shù)據(jù)目錄再嘗試 DROP

systemctl stop mysqld
mv /var/lib/mysql/dbname/problem_table.ibd /tmp/
systemctl start mysqld

# 然后登錄 MySQL 執(zhí)行:
DROP TABLE dbname.problem_table;

注意這樣會(huì)讓 InnoDB 報(bào)告表空間文件不存在,但通??商^ DROP 階段的 crash。

方法C:使用 innodb_force_recovery 修復(fù)

編輯 my.cnf 添加:

[mysqld]
innodb_force_recovery=1

數(shù)值從 1 到 6 逐級(jí)遞增(數(shù)值越高風(fēng)險(xiǎn)越大,建議從 1 開始測(cè)試)

然后重啟 MySQL,再嘗試導(dǎo)出或 DROP 表。

第五階段:系統(tǒng)層修復(fù)或替換磁盤

5.1 標(biāo)記/屏蔽壞塊(臨時(shí)措施,不推薦長(zhǎng)期使用)

e2fsck -l badblocks.txt /dev/sda3

5.2 若壞塊不可控,推薦更換磁盤

  • 使用 ddrescue 拷貝數(shù)據(jù)至新磁盤;
  • 全量備份 + 恢復(fù)到新設(shè)備是最終手段。

附:innodb_force_recovery 參數(shù)說明

含義風(fēng)險(xiǎn)級(jí)別
1跳過 insert buffer 的恢復(fù)安全
2跳過 redo log 的應(yīng)用
3跳過 undo log 恢復(fù)
4不執(zhí)行 purge 操作
5不執(zhí)行 insert buffer 合并
6禁止雙寫緩沖,跳過一切恢復(fù)流程極高

總結(jié):MySQL 磁盤壞塊處理建議

步驟行動(dòng)目的
1確認(rèn)日志、dmesg、壞塊位置確認(rèn)是否真為磁盤故障
2備份健康數(shù)據(jù)防止壞塊擴(kuò)散影響
3使用 TRUNCATE 或 rename + DROP規(guī)避觸發(fā) I/O 錯(cuò)誤
4啟用 innodb_force_recovery 修復(fù)數(shù)據(jù)導(dǎo)出和表結(jié)構(gòu)清理
5標(biāo)記壞塊或更換磁盤根除問題源頭

如果你能提供 mysqld.errdmesg 日志中具體的報(bào)錯(cuò)信息,我可以幫你進(jìn)一步診斷。需要我協(xié)助你寫具體的修復(fù)操作腳本也可以。

到此這篇關(guān)于MySQL磁盤壞塊處理的全流程的文章就介紹到這了,更多相關(guān)MySQL磁盤壞塊處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql 5.7.27 安裝配置方法圖文教程

    mysql 5.7.27 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.27 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • MySQL的Grant命令詳解

    MySQL的Grant命令詳解

    mysql中可以通過Grant命令為數(shù)據(jù)庫(kù)賦予用戶權(quán)限,這里簡(jiǎn)單介紹下Grant的使用方法,需要的朋友可以參考下
    2013-10-10
  • 簡(jiǎn)述Redis和MySQL的區(qū)別

    簡(jiǎn)述Redis和MySQL的區(qū)別

    這篇文章主要介紹了簡(jiǎn)述Redis和MySQL的區(qū)別,小編覺得挺不錯(cuò)的,這里給大家分享下,需要的朋友可以了解。
    2017-10-10
  • MySQL 8中新增的這三大索引 隱藏、降序、函數(shù)

    MySQL 8中新增的這三大索引 隱藏、降序、函數(shù)

    這篇文章主要介紹了MySQL 8.x版本中新增的三大索引 隱藏索引、降索引序、函數(shù)索引,如果文章對(duì)你有點(diǎn)幫助,小伙伴們點(diǎn)贊、收藏、評(píng)論、分享走起呀
    2021-09-09
  • Nacos配置MySQL8的方法

    Nacos配置MySQL8的方法

    這篇文章主要介紹了Nacos配置MySQL8的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Mysql中NTILE()函數(shù)的具體使用

    Mysql中NTILE()函數(shù)的具體使用

    NTILE()函數(shù)用于將分區(qū)中的有序數(shù)據(jù)分為n個(gè)等級(jí),本文主要介紹了Mysql中NTILE()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Mysql查看死鎖與解除死鎖的深入講解

    Mysql查看死鎖與解除死鎖的深入講解

    這篇文章主要給大家介紹了關(guān)于Mysql查看死鎖與解除死鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL中如何將字符串替換簡(jiǎn)單示例

    MySQL中如何將字符串替換簡(jiǎn)單示例

    mysql是一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它提供了多種函數(shù)來處理和操作數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL中如何將字符串替換的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • MySQL分表和分區(qū)的具體實(shí)現(xiàn)方法

    MySQL分表和分區(qū)的具體實(shí)現(xiàn)方法

    這篇文章主要介紹了MySQL分表和分區(qū)的具體實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • MySQL 出現(xiàn)錯(cuò)誤1418 的原因分析及解決方法

    MySQL 出現(xiàn)錯(cuò)誤1418 的原因分析及解決方法

    這篇文章主要介紹了MySQL 出現(xiàn)錯(cuò)誤1418 的原因分析及解決方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評(píng)論