特定の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は存在するが、正しく構成されていない」ので、...
以前のバージョンのMySQL 5.7をインストールするときに、このエラーを何度も目にしました。まだこのエラーが発生しているのに驚いています。
MySQL 8.0より前は、mysql
スキーマの一部のテーブルはMyISAM
です。
残念ながら、MyISAM
tablesは非常に簡単に破損します。
例:.MYD
ファイルのヘッダーは、開いているファイルハンドルの数を保持します。 MyISAM
テーブルが閉じていて、開いているファイルハンドルの値がゼロ以外の場合、MyISAM
ストレージエンジンはテーブルが破損していると見なします。
解決策:次のコマンドを実行するだけです。
mysql> REPAIR TABLE mysql.db;
以前にこれを提案しました:Mar 15, 2012
: なぜMySQLテーブルがクラッシュするのですか?それを防ぐにはどうすればよいですか?