MySQLで破損したテーブルを修復する方法

自宅サーバーのMySQLのテーブルが壊れ、SELECT文で書き込まれていないはずの値が返ってきたり、mysqldumpが途中で停止しまったりするようになってしまいました。修復した時のメモを残しておきます。

データベースのバックアップを取る

$ sudo service mysql stop
$ mkdir mysql_backup
$ su -
$ cp -r /var/lib/mysql/* mysql_backup
$ exit

データベースのダンプをする

$ sudoedit /etc/mysql/my.cnf

# 以下の内容をmy.cnfに加える
[mysqld]
innodb_force_recovery = 4

$ sudo service mysql start
$ mysqldump -uroot -p[password] -A -v --flush-privileges --routines --result-file mysql_backup.sql
$ sudo service mysql stop

# 上記で加えた内容を削除する
$ sudoedit /etc/mysql/my.cnf

データベースを再作成する

sudo rm -Rf /var/lib/mysql/*
sudo mkdir -p /var/lib/mysql
sudo mysql_install_db
sudo chown -Rf mysql:mysql mysql
sudo service mysql start
# 一番初めに聞かれるパスワードは初期接続用のパスワード。
# 何も入力せずにそのままエンターキーを押すと通る。
sudo mysql_secure_installation

ダンプしたデータベースをリストアする

mysql -uroot -p[password] < mysql_backup.sql

リンク先ではmysql_install_dbとmysql_secure_installationについて触れられていなかったので、参考にしつつ記事にしました。

リンク