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について触れられていなかったので、参考にしつつ記事にしました。
リンク
- MySQL データベースでの InnoDB 破損を修復するには http://kb.parallels.com/jp/6586