Mysql

即使在完全轉儲和重新導入之後,MySQL 也會損壞

  • October 25, 2012

我們有一個生產問題,MySQL 開始出現 InnoDB 損壞的頁面錯誤並崩潰。

錯誤消息似乎與索引有關,所以我假設數據本身是好的,當我用 innodb_force_recovery=1 重新啟動伺服器時,我能夠使用 mysqldump 轉儲很多。

但是,重新導入並沒有修復錯誤,刪除/重新創建數據庫也沒有幫助,我什至已經將 innodb 文件移開並讓 MySQL 在重新導入之前重新創建它們。

不高興,損壞在幾分鐘內不斷重新發生,伺服器再次當機。

奇怪的是數據庫是 ISAM 和 InnoDB 表的混合,我在 ISAM 表中也有一些錯誤,在一些嘗試中也是如此。

這可能是與數據相關的東西,MySQL 中更深層次的損壞,上面沒有清除,或者下面有硬體故障的跡象?

編輯:這是在 Ubuntu 8.04 上執行的 Mysql 5.0.51

Paolo,你能提供mysql錯誤日誌嗎?如果一個不可用,您可以通過將此行添加到您的 my.cnf 文件來添加一個

$$ mysqld $$ 日誌錯誤=/var/log/mysql/mysql.err

縮小研究範圍的一種可能的想法。

您已經知道如何刪除 ibdata 和 iblog 文件以創建新文件。如果你只是想測試你的mysql安裝。

  1. 刪除 Innodb_force_recovery 或將其註釋掉
  2. 備份您的數據庫:mysqldump --all-databases -u root -p | gzip -9 > all_databases.sql.gz
  3. 將您的 MySQL 數據目錄移動到其他位置:mv /var/lib/mysql{,.bak}
  4. 創建一個新的 MySQL 數據目錄:mkdir /var/lib/mysql
  5. 授予 MySQL 使用者權限:chown -R mysql:mysql /var/lib/mysql
  6. 啟動 MySQL:/etc/init.d/mysql start
  7. 在添加到 my.cnf 的 mysql 日誌上執行 tail -f:tail -f /var/log/mysql/mysql.err

如果 MySQL 沒有執行,那麼系統級別的其他東西是不正確的。正如 Gopinath 的連結所提到的。是否有足夠的磁碟空間:df -h 和 inode:df -i?你的文件系統健康嗎?系統重新啟動或在安裝 MySQL 的磁碟分區上使用 fsck 將檢測並可能修復文件系統問題。

如果 MySQL 回來了,那麼您可以恢復您的數據庫:

zcat all_databases.sql.gz | mysql -u root -p

完成我發送的步驟後將日誌發送給我們,我們將從那裡獲取。

嗨,Paolo 可能是您在強制恢復中使用的 innodb_force_recovery=1 的問題。嘗試使用值 4。可能有一些後台程序正在執行。將 innodb_force_recovery=4 值設置為 4,不允許後台程序修改數據庫,以便我們可以安全地進行恢復過程。

請點擊以下連結了解詳細資訊:

http://tech.amikelive.com/node-36/mysql-50-recovering-crashedcorrupted-innodb-database/

引用自:https://dba.stackexchange.com/questions/7169