次の方法で共有


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 シングル サーバーの場合は、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