即使在完全轉儲和重新導入之後,MySQL 也會損壞
我們有一個生產問題,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安裝。
- 刪除 Innodb_force_recovery 或將其註釋掉
- 備份您的數據庫:
mysqldump --all-databases -u root -p | gzip -9 > all_databases.sql.gz
- 將您的 MySQL 數據目錄移動到其他位置:
mv /var/lib/mysql{,.bak}
- 創建一個新的 MySQL 數據目錄:
mkdir /var/lib/mysql
- 授予 MySQL 使用者權限:
chown -R mysql:mysql /var/lib/mysql
- 啟動 MySQL:
/etc/init.d/mysql start
- 在添加到 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/