MySQL サーバ起動障害への対応とデータ復元テクニック

トラブル概要と最初の対処方針

システムの予期せぬシャットダウンや停電後に、MySQL データベースエンジンが正常に初期化できず起動しない事象が発生することがあります。特に InnoDB ストレージエンジンを採用している場合、システムテーブル空間やデータページの一貫性が損なわれている可能性が高まります。そのような状況においては、設定ファイルを修正して強制的な回復モードへ移行させる手法が有効です。

1. 設定ファイルの修正と強制回復パラメータ

まず、MySQL のメイン設定ファイル(通常は /etc/my.cnf)を開き、[mysqld] セクションに以下のパラメータを追加してください。この設定値は、データ整合性のリスクとサービスの可用性のバランスを考慮して調整します。

[mysqld]
# 初期回復時は最小値の設定が推奨されます
innodb_force_recovery = 1

InnoDB 強制回復レベルの意味合いは以下の通りです。段階的に値を増やし、サーバーが起動できる最小値を見つけるのが安全策です。

  • レベル 1: ダメージのあるページがあっても起動を続行します。SELECT クエリで破損したインデックスをスキップ可能です。
  • レベル 2: バックグラウンド処理や purge スレッドの実行を無効化します。
  • レベル 3: コミットされていないトランザクションのロールバック処理を行いません。
  • レベル 4 - 6: さらに多くの機能制限を加えます。ただし、これらの値は永続的なデータ破損を引き起こす可能性があるため、最終手段としてのみ使用し、設定後は索引の再生成やデータエクスポートを速やかに行う必要があります。

2. データベースサービスの再起動

設定変更後に、MySQL プロセスを再開させます。Linux ディストリビューションの管理システムに合わせてコマンドを選択します。

# Systemd を利用している環境の場合
sudo systemctl start mysqld

# または init スクリプトを利用する場合
sudo /etc/init.d/mysql start

3. エラーログにおける問題箇所の特定

起動プロセスが完了しない場合、エラーログを確認する必要があります。データパスはインストール構成によりますが、一般的には /var/log/mysqld.logdatadir

2024-04-12T07:19:53.256339Z 0 [ERROR] [MY-000067] [Server] unknown variable 'innodb_purge_thread=0'.
2024-04-12T07:19:53.256463Z 0 [ERROR] [MY-010119] [Server] Aborting

ここで [ERROR] レベルの出力に注目してください。unknown variable というメッセージが表示されている場合、設定ファイル内に現在の MySQL バージョンでサポートされていない、または廃止されたパラメータが含まれていることを示唆しています。今回の例では innodb_purge_thread=0 といった項目が認識されず、処理が中断されています。

解決策: 該当の未定義変数を設定ファイルから削除し、再度サービスを開始すれば正常になるケースが大半です。

4. データの保護と移行戦略

サーバーが起動状態になったとしても、データの完全性については常に懸念が残ります。安定した状態で稼働中に、データを外部へ保存しておくことが最も重要です。以下に論理バックアップを作成および復元する標準的な方法を紹介します。

mysqldump によるエクスポート

特定のデータベース全体、あるいは全データベースを SQL ファイルとして書き出します。

# 対象 DB のダンプ作成(タイムスタンプ付き)
mysqldump -u root -p --default-character-set=utf8mb4 --single-transaction sales_data > sales_backup_$(date +%F).sql

# 全データベースのエクスポートが必要であれば
mysqldump -u root -p --all-databases > full_backup.sql

データの復元実行

ダンプした SQL ファイルを使用して、ターゲットとなるデータベースにデータを流し込みます。

# 新しいデータベースへのインポート例
mysql -u root -p target_database_name < sales_backup_2024-04-12.sql

物理バックアップよりも軽量ですが、大規模データセットの場合はパフォーマンスに影響がある場合があるため、運用計画に応じて適切なバックアップ策略を採用してください。

タグ: MySQL InnoDB recovery database-administration linux-system

6月10日 19:27 投稿