Mac High Sierra (10.13.2) にて稼働させている MySQL がここ数日二度ほど壊れた。Mac をスリープにして、それまでは何も問題なかったのが、その二回は Mac そのものが落ちていて、バックグラウンドで稼働させていた MySQL のデータベースが壊れた。
正確には壊れたのか、何かのファイルがロックされたのか細かな調査まではしていないが innodb_force_recovery オプションで起動して、ダンプし、初期化しないと対応できなかったので何かの不正状態になっていたと思われる。
その際の復旧手順を備忘録を込めて記録
- /etc/my.cnf に設定を行い MySQL サーバーを起動。innodb_force_recovery の数値はエラー状況によって異なる。私の場合は 1 では起動せず 2 で起動することができた。
[mysqld]
log-error=/var/log/mysqld.log
innodb_force_recovery = 2 - /var/log/mysqld.log を別ターミナルにてモニタリング
$ sudo tail -f /var/log/mysqld.log
- データベースリストを取得
$ mysql -u root -p -e ‘show databases’|grep -v Database >db_list.txt
- 全DBをダンプ
$ for db in `cat db_list.txt`;do MYSQL_PWD=YOUR_PASSWORD mysqldump -u root $db >$db.sql;done
- data ディレクトリをバックアップ (/usr/local/mysql が Symbolic Link になっていることを想定)
$ cd /usr/local/mysql
$ sudo mv data data.backup - 初期化
$ sudo mysqld –initialize –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data
- mysqld の実行
$ sudo /usr/local/mysql/support-files/mysql.server start
- ターミナル上にて root ユーザーのパスワードを確認してログイン
$ mysql -u root -p
- root ユーザーのパスワード変更
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘new_password’;
- ダンプしたデータベースを個別にインポート
原因究明は、それはそれで行う必要があるが取り急ぎデータ復旧できたので一安心。