ラズパイMySQLクラッシュからの復旧

昨日、原因不明の不運な停電に見舞われラズパイmysqldが起動しなくなった問題の続編です(^_^)

<状況のおさらい>
停電後、mysqldが起動せず以下のエラーを吐く。

# systemctl start mysql
Job for mysql.service failed. See ‘systemctl status mysql.service’ and ‘journalctl -xn’ for details.

# mysql
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

このエラーをググればそれなりに解決策が出てくるかと思いますが、私の場合は駄目でした(^_^;

冷静にエラーログを確認します。
# cat /var/log/mysql/error.log

以下のくだりを発見、ググります。
stack_bottom = 0 thread_stack 0x30000

そして起動に導いてくれるサイトに辿り着きました。
https://bugs.mysql.com/bug.php?id=65071

なるほど~、innodbがcrashしちゃった訳ですね。

# vi /etc/mysql/my.cnf
[mysqld]
innodb_force_recovery = 6 ←追加

# systemctl start mysql
エラーを吐かなくなりました。これは期待!

# mysql
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
無事起動したっぽい(^_^)

起動後、この「innodb_force_recovery = 6」をmy.cnfからコメントアウトしてmysqlをリスタートしましたが、起動しませんでした。

innnodb_forece_recoveryの詳細です。
https://dev.mysql.com/doc/refman/5.6/ja/forcing-innodb-recovery.html

う~ん、読み取り専用になるのかぁ(^_^;実際にUpdateを実行しようとすると、
ERROR 1030 (HY000): Got error -1 from storage engine
怒られました(笑)この後、mysqldumpを試すもwordpressのとあるテーブルが壊れていて失敗。

しかしながら、どうしてもデータが必要な場合はこれで十分救われる可能性がありますね(^_^)
今回はバックアップも活用できたし、良い頭の運動になりました(笑)