Azure Database for MySQL - フレキシブル サーバーでデータベースの破損のトラブルシューティングを行う
データベースが破損すると、アプリケーションのダウンタイムが発生する可能性があります。 また、データが損失しないうちに破損の問題を解決することも重要です。 データベースの破損が発生すると、サーバー ログに次のエラーが表示されます: InnoDB: Database page corruption on disk or a failed.
この記事では、データベースまたはテーブルの破損の問題を解決する方法を学習します。 Azure Database for MySQL フレキシブル サーバーでは InnoDB エンジンを使用します。 この機能により、破損チェックと修復操作が自動化されます。 InnoDB では、読み取られるすべてのページでチェックサムを実行することで、破損したページが確認されます。 チェックサムの不一致を見つけると、Azure Database for MySQL フレキシブル サーバー インスタンスを自動的に停止します。
データベースの破損の問題を迅速に軽減するには、次のオプションを試してください。
MySQL サーバーを再起動する
通常、データベースまたはテーブルが破損していることがわかるのは、アプリケーションがそのテーブルまたはデータベースにアクセスしたときです。 InnoDB にはクラッシュ復旧メカニズムがあり、サーバーの再起動時にほとんどの問題を解決できます。 したがって、サーバーの再起動は、データベースが異常な状態になる原因になったクラッシュからサーバーを復旧させるのに役立ちます。
ダンプして復元する方法を使用する
"ダンプして復元する" 方法を使用して破損の問題を解決することをお勧めします。 この方法の手順は次のとおりです。
- 破損したテーブルにアクセスします。
- mysqldump ユーティリティを使用して、テーブルの論理バックアップを作成します。 このバックアップには、テーブル構造とその中のデータが保持されます。
- データベースにテーブルを再読み込みします。
データベースまたはテーブルをバックアップする
重要
- クライアント コンピューターからサーバーにアクセスするために、ファイアウォール規則が構成されていることを確認します。 詳細については、「Azure Database for MySQL シングル サーバーでのファイアウォール規則の構成」と「Azure Database for MySQL フレキシブル サーバーでのファイアウォール規則の構成」を参照してください。
- SSL が有効になっている場合は、mysqldump で SSL オプション
--ssl-cert
を使用します。
mysqldump を使用してコマンド ラインからバックアップ ファイルを作成します。 次のコマンドを実行します。
$ mysqldump [--ssl-cert=/path/to/pem] -h [host] -u [uname] -p[pass] [dbname] > [backupfile.sql]
パラメーターについて次に説明します。
[ssl-cert=/path/to/pem]
:SSL 証明書のパス。 クライアント コンピューター上の SSL 証明書をダウンロードし、コマンドでそのパスを設定します。 SSL が無効になっている場合は、このパラメーターを使用しないでください。[host]
: Azure Database for MySQL フレキシブル サーバー インスタンス。[uname]
:サーバーの管理者ユーザーの名前。[pass]
:管理者ユーザーのパスワード。[dbname]
:データベースの名前。[backupfile.sql]
:データベース バックアップのファイル名。
重要
- Azure Database for MySQL シングル サーバーの場合は、
admin-user@servername
という形式を使用して以下のコマンドにおけるmyserveradmin
を置き換えます。 - Azure Database for MySQL フレキシブル サーバーの場合は、
admin-user
という形式を使用して、以下のコマンドのmyserveradmin
を置き換えます。
特定のテーブルが破損している場合は、バックアップするデータベース内の特定のテーブルを選択します。
$ mysqldump --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb table1 table2 > testdb_tables_backup.sql
1 つ以上のデータベースをバックアップするには、--database
スイッチを使用し、スペースで区切ってデータベース名の一覧を指定します。
$ mysqldump --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p --databases testdb1 testdb3 testdb5 > testdb135_backup.sql
データベースまたはテーブルを復元する
次の手順では、データベースまたはテーブルを復元する方法について説明します。 バックアップ ファイルを作成したら、mysql ユーティリティを使用して、テーブルまたはデータベースを復元できます。 次のコマンドを実行します。
mysql --ssl-cert=</path/to/pem> -h [hostname] -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]
これは、mysqldump で作成されたバックアップ ファイルから testdb
を復元する例です。
重要
- Azure Database for MySQL シングル サーバーの場合は、
admin-user@servername
という形式を使用して以下のコマンドにおけるmyserveradmin
を置き換えます。 - Azure Database for MySQL フレキシブル サーバーの場合は、
admin-user
という形式を使用して、以下のコマンドのmyserveradmin
を置き換えます。
$ mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql