web-dev-qa-db-ja.com

エラーコード:1728。mysql.dbからロードできません。テーブルはおそらく破損しています

特定のDBユーザー(myuser)でDBクエリを実行しようとすると、次のエラーが発生します。

ユーザー「myuser」@「localhost」のデータベース「mydatabase」へのアクセスが拒否されました[1044]

私はそのユーザーの許可を確認することに決め、許可の1つが更新から利益を得る可能性があることを確認したので、更新しようとすると次のエラーが発生しました。

エラーコード:1728。mysql.dbからロードできません。テーブルが破損している可能性があります

私はエラーをグーグルで見つけて mysql.procからロードできません。テーブルが破損している可能性がありますmysql_upgrade -u root -pxxx。私はそれを試し、このエラーを得ました:

エラーが発生しました:mysql.sessionは存在しますが、正しく構成されていません。 mysql.sessionには、performance_schemaデータベースとmysql.dbテーブルのSELECT権限、およびSUPER権限も必要です。

私はそのエラーをグーグルして見つけました MySQLアップグレードの問題 ですが、答えは当てはまりません-1つしかないようですmysql.session使用するユーザーSELECT * FROM mysql.user;。だから私は多分私が自分でグラントを作成するだろうと考えました:

GRANT SELECT ON `performance_schema`.* TO 'mysql.session'@'localhost';
GRANT SELECT ON `mysql`.`db` TO 'mysql.session'@'localhost';
GRANT SUPER ON *.* TO 'mysql.session'@'localhost';

唯一の問題:そうしようとすると、同じ "Error Code: 1728. Cannot load from mysql.db. The table is probably corrupted "以前に入手しました。

私の質問は...これを修正するにはどうすればよいですか?数か月前に問題なく復元した完全なDBバックアップがあります。それ以降、DBでDBの変更が発生した場合は、失うことで大丈夫です。たぶん私の最善の選択肢は、単にMySQLをアンインストールして再インストールすることでしょうか?それが事実である場合、この問題が再び発生するのを防ぐために実行できる手順はありますか?

MySQL 5.7.25-0ubuntu0.16.04.2をDigital Oceanドロップレット上のUbuntu 16.04.5 LTSで実行しています。

何か案は?

編集:新しいMySQLユーザーを作成しようとすると、このエラーも発生します:

CREATE USER username IDENTIFIED BY 'password';

私は試した mysqlcheck -uroot mysql dbそしてこれを取り戻しました:

mysql.db                                           OK

私は試した ls -latr /var/lib/mysql/mysql/db*そしてこれを取り戻しました:

-rw-r----- 1 mysql mysql   65 Nov  8 03:55 db.opt
-rw-r----- 1 mysql mysql  440 Nov 10 17:51 db.MYD
-rw-r----- 1 mysql mysql 5120 Feb 11 11:54 db.MYI
-rw-r----- 1 mysql mysql 9582 Feb 11 11:54 db.frm

* .ibdファイルidkがないことに注意してください。

SELECT * FROM mysql.dbは、SSHルート/ MySQLの両方としてログインしている間、問題なく動作しますが、すべての "Error Code: 1728. Cannot load from mysql.db. The table is probably corrupted "SSH root/MySQL root so idkとしてログインしているときにもエラーが発生します。

edit2:私もできませんapt-get remove mysql-server以前に取得していたのと同じ「mysql.sessionは存在するが、正しく構成されていない」ので、...

2
neubert

以前のバージョンのMySQL 5.7をインストールするときに、このエラーを何度も目にしました。まだこのエラーが発生しているのに驚いています。

MySQL 8.0より前は、mysqlスキーマの一部のテーブルはMyISAMです。

残念ながら、MyISAMtablesは非常に簡単に破損します。

例:.MYDファイルのヘッダーは、開いているファイルハンドルの数を保持します。 MyISAMテーブルが閉じていて、開いているファイルハンドルの値がゼロ以外の場合、MyISAMストレージエンジンはテーブルが破損していると見なします。

解決策:次のコマンドを実行するだけです。

mysql> REPAIR TABLE mysql.db;

以前にこれを提案しました:Mar 15, 2012なぜMySQLテーブルがクラッシュするのですか?それを防ぐにはどうすればよいですか?

1
RolandoMySQLDBA