Azure Database for MySQL - フレキシブル サーバーでのデータベース破損のトラブルシューティング
適用対象: Azure Database for MySQL - 単一サーバー Azure Database for MySQL - フレキシブル サーバー
重要
Azure Database for MySQL の単一サーバーは提供終了パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、「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 単一サーバーの場合は、次のコマンドで置き換える
myserveradmin
形式admin-user@servername
を使用します。 - Azure Database for MySQL フレキシブル サーバーの場合は、次のコマンドで置き換える
myserveradmin
形式admin-user
を使用します。
特定のテーブルが破損している場合は、バックアップするデータベース内の特定のテーブルを選択します。
$ 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 単一サーバーの場合は、次のコマンドで置き換える
myserveradmin
形式admin-user@servername
を使用します。 - Azure Database for MySQL フレキシブル サーバーの場合は、次のコマンドで置き換える
myserveradmin
形式admin-user
を使用します。
$ mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql
次のステップ
上記の手順を実行しても問題が解決しない場合は、いつでもサーバー全体を復元できます。