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 にはクラッシュ復旧メカニズムがあり、サーバーの再起動時にほとんどの問題を解決できます。 そのため、サーバーを再起動すると、データベースの状態が悪くなる原因となったクラッシュからサーバーが復旧するのに役立ちます。

ダンプして復元する方法を使用する

"ダンプして復元する" 方法を使用して破損の問題を解決することをお勧めします。 この方法の手順は次のとおりです。

  1. 破損したテーブルにアクセスします。
  2. mysqldump ユーティリティを使用して、テーブルの論理バックアップを作成します。 このバックアップには、テーブル構造とその中のデータが保持されます。
  3. データベースにテーブルを再読み込みします。

データベースまたはテーブルをバックアップする

重要

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

次のステップ

上記の手順を実行しても問題が解決しない場合は、いつでもサーバー全体を復元できます。