この記事では、MySQLテーブルとデータベースを修復する方法について説明します。データベースのテーブルが大きくなると、エラーが発生することがあります。その場合、MySQLには、データベーステーブルのチェックと修復に使用できるいくつかのツールが含まれています。これを行うには、以下の手順を表示順に実行します。
この記事は、記事の詳細に記載されている製品にのみ適用されます サイドバー。これらの手順を実行するには、サーバーへのルートアクセス権が必要です。ステップ1:データベースのバックアップ
データベースを修復する前に、まずデータベースをバックアップする必要があります。すべてのデータベースからすべてのファイルをバックアップするには、次の手順に従います。
- SSHを使用してサーバーにログインします。
- Linuxディストリビューションに適切なコマンドを使用してMySQLサーバーを停止します:
- CentOSおよびFedoraの場合は、次のように入力します。
service mysqld stop
-
DebianおよびUbuntuの場合、次のように入力します。
service mysql stop
- CentOSおよびFedoraの場合は、次のように入力します。
-
次のコマンドを入力します。
cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
このコマンドは、すべてのデータベースのすべてのファイルを、現在の時刻(より正確には、1970年1月1日から経過した秒数)に基づいてディレクトリ名にコピーします。これにより、各データベースのバックアップが一意の名前を持つディレクトリに確実に保存されます。保護を強化するために、データベースファイルをサーバー上ではなくリモートの場所にバックアップできます(バックアップする必要があります)。 -
Linuxディストリビューションに適切なコマンドを使用してMySQLサーバーを再起動します。
- CentOSおよびFedoraの場合は、次のように入力します。
service mysqld start
-
DebianおよびUbuntuの場合、次のように入力します。
service mysql start
- CentOSおよびFedoraの場合は、次のように入力します。
ステップ2:mysqlcheckの実行
データベースをバックアップすると、トラブルシューティングを開始する準備が整います。 mysqlcheck プログラムを使用すると、MySQLの実行中にデータベースをチェックおよび修復できます。この機能は、MySQLサービス全体を停止せずにデータベースで作業する場合に役立ちます。
さらに、 mysqlcheck MyISAMまたはInnoDBデータベースエンジンを使用するテーブルで動作します。
データベーステーブルが使用しているストレージエンジンを特定する方法については、この記事を参照してください。mysqlcheckを使用するには 、次の手順に従います:
- rootユーザーとして、次のコマンドを入力します:
cd /var/lib/mysql
-
次のコマンドを入力し、データベースを確認するデータベースの名前に置き換えます。
mysqlcheck database
前のコマンドは、指定されたデータベース内のすべてのテーブルをチェックします。または、データベース内の特定のテーブルを確認するには、次のコマンドを入力します。データベースをデータベースの名前に置き換え、テーブルを確認するテーブルの名前に置き換えます。
mysqlcheck database table
-
Mysqlcheck 指定されたデータベースとテーブルをチェックします。テーブルがチェックに合格した場合、 mysqlcheck OKを表示します テーブルのために。ただし、 mysqlcheckの場合 テーブルのエラーを報告します。次のコマンドを入力して、テーブルを修復してみてください。 databaseをデータベース名に置き換え、tableをテーブル名に置き換えます。
mysqlcheck -r database table
- mysqlcheckの場合 1つまたは複数のテーブルを正常に修復できない場合は、次の手順に進みます。
ステップ3:エンジン固有の診断を実行する
mysqlcheckを実行している場合 問題が修正されない場合、次のステップは、1つまたは複数のデータベーステーブルで使用されるエンジンに固有の診断を実行することです。テーブルのデータベースストレージエンジンについて、以下の適切な手順に従ってください。
データベーステーブルが使用しているストレージエンジンを特定する方法については、この記事を参照してください。MyISAMテーブルをmyisamchkで修復する
テーブルにMyISAMストレージエンジンを使用している場合は、 myisamchkを実行できます。 それを修復するプログラム。これを行うには、次の手順に従います。
myisamchk プログラムは、MyISAMストレージエンジンを使用するテーブルに対してのみ機能します。 InnoDBエンジンでは機能しません。- Linuxディストリビューションに適切なコマンドを使用してMySQLサーバーを停止します:
- CentOSおよびFedoraの場合は、次のように入力します。
service mysqld stop
-
DebianおよびUbuntuの場合、次のように入力します。
service mysql stop
- CentOSおよびFedoraの場合は、次のように入力します。
-
次のコマンドを入力します。
cd /var/lib/mysql
- データベースが配置されているディレクトリに移動します。たとえば、データベースの名前が Customersの場合 、cdcustomersと入力します。
-
次のコマンドを入力し、テーブルを確認するテーブルの名前に置き換えます。
myisamchk table
データベース内のすべてのテーブルを確認するには、次のコマンドを入力します。
myisamchk *.MYI
前のコマンドが機能しない場合は、 myisamchkを妨げている可能性のある一時ファイルを削除してみてください。 正しく実行されないようにします。これを行うには、 / var / lib / mysqlに戻ります。 ディレクトリをクリックし、次のコマンドを入力します。
ls */*.TMD
リストされている.TMDファイルがある場合は、次のコマンドを入力してそれらを削除します。
rm */*.TMD
次に、 myisamchkを実行してみます もう一度。
-
テーブルの修復を試みるには、 table を置き換えて、次のコマンドを入力します 修復するテーブルの名前:
myisamchk --recover table
-
Linuxディストリビューションに適切なコマンドを使用してMySQLサーバーを再起動します。
- CentOSおよびFedoraの場合は、次のように入力します。
service mysqld start
-
DebianおよびUbuntuの場合、次のように入力します。
service mysql start
- CentOSおよびFedoraの場合は、次のように入力します。
- 修復された1つまたは複数のテーブルをテストします。
InnoDBリカバリプロセスの実行
データベーステーブルにInnoDBストレージエンジンを使用している場合は、InnoDBリカバリプロセスを実行できます。これを行うには、次の手順に従います。
- お好みのテキストエディタを使用して、 my.cnfを開きます。 サーバー上のファイル。 my.cnfの場所 ファイルはLinuxディストリビューションによって異なります:
- CentOSおよびFedoraでは、 my.cnf ファイルは/etcにあります ディレクトリ。
- DebianおよびUbuntuでは、 my.cnf ファイルは/etc / mysqlにあります ディレクトリ。
- my.cnf ファイルで、 [mysqld]を見つけます セクション。
-
次の行を[mysqld]に追加します セクション:
innodb_force_recovery=4
-
変更をmy.cnfに保存します ファイルを作成し、Linuxディストリビューションに適切なコマンドを使用してMySQLサーバーを再起動します。
- CentOSおよびFedoraの場合は、次のように入力します。
service mysqld restart
-
DebianおよびUbuntuの場合、次のように入力します。
service mysql restart
- CentOSおよびFedoraの場合は、次のように入力します。
-
次のコマンドを入力して、すべてのデータベースを databases.sqlにエクスポートします。 ファイル:
mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql
-
mysqlを開始します プログラムを実行し、 DROP DATABASEを使用して影響を受ける1つまたは複数のデータベースを削除してみてください 指図。
MySQLがデータベースを削除できない場合は、MySQLサーバーを停止した後、以下の手順8でデータベースを手動で削除できます。
-
Linuxディストリビューションに適切なコマンドを使用してMySQLサーバーを停止します。
- CentOSおよびFedoraの場合は、次のように入力します。
service mysqld stop
-
DebianおよびUbuntuの場合、次のように入力します。
service mysql stop
- CentOSおよびFedoraの場合は、次のように入力します。
-
手順6でデータベースを削除できなかった場合は、次のコマンドを入力してデータベースを手動で削除します。データベースを、削除するデータベースの名前に置き換えます。
cd /var/lib/mysql rm -rf database
mysqlを削除しないように注意してください またはperformance_schema ディレクトリ! -
お好みのテキストエディタを使用して、 my.cnfを開きます。 サーバー上のファイルを作成し、 [mysqld]の次の行をコメントアウトします。 示されているセクション:
#innodb_force_recovery=4
これにより、InnoDBリカバリモードが無効になります。 -
変更をmy.cnfに保存します ファイルを作成し、Linuxディストリビューションに適切なコマンドを使用してMySQLサーバーを起動します。
- CentOSおよびFedoraの場合は、次のように入力します。
service mysqld start
-
DebianおよびUbuntuの場合、次のように入力します。
service mysql start
- CentOSおよびFedoraの場合は、次のように入力します。
-
次のコマンドを入力して、手順5で作成したバックアップファイルからデータベースを復元します。
mysql < databases.sql
- 復元されたデータベースをテストします。
- mysqlcheckの詳細については 、https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.htmlにアクセスしてください。
- myisamchkの詳細については 、https://dev.mysql.com/doc/refman/5.5/en/myisamchk.htmlにアクセスしてください。