ある日、TeamSpeak 3サーバを再起動させたところ、数分後に落ちてしまうことがあった。
以下がその時のTeamSpeak サーバのログ
error: Lost connection to MySQL server during query
error: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (111)
Assertion “error == ERROR_ok” failed at ../../../../s/deps/teamspeak_server_lib/src/ts_server/database/db_database.cpp:157;
また、MariaDBのログにはこんなログも。
[ERROR] mysqld: Table ‘./wordpress/wp_options’ is marked as crashed and should be repaired
InnoDB: Assertion failure in thread 139765944185600 in file fsp0fsp.cc line 2390
(省略)
[Note] InnoDB: Doing recovery: scanned up to log sequence number 4863293368
[Note] InnoDB: Starting crash recovery.
何回MariaDBを再起動させても”[Note] Crash recovery finished.”が消えない状況だったため、データベースの復旧が必要となった。
自分の環境では以下の手順で復旧ができた。
- 以下の行をmy.cnfに追加しMariaDBを起動する。
[mysqld] innodb_force_recovery = 1
- mysqldumpで全てのデータベースのダンプをとる。
- MariaDBを停止する。
- mysqlのデータベースのデータファイルを全て削除する。
(mysqlフォルダ内全て) - 手順1.で追加した行を削除する。
- mysql_install_dbを実行する。
- MariaDBを起動する。
- mysql_secure_installationを実行する。
- 手順2.でとったダンプからデータベースを復旧する。
手順9.で”No more room in record file”とエラーが出る場合は、
手順1.で追加した行を削除し忘れているはず。
参考サイト