"BOKU"のITな日常

BOKUが勉強したり、考えたことを頭の整理を兼ねてまとめてます。

mariaDBでGRANTしたら「 Index for table 'db' is corrupt; try to repair it」が表示された!!

f:id:arakan_no_boku:20211207220619p:plain

目次

ユーザ追加して「GRANT文」実行したらエラーがでた

MariaDB(10.4.8)に、MySQLコマンドに「root」でログインして、ユーザ追加と権限の付与をやってました。

 GRANT ALL PRIVILEGES ON hogehogedb.* TO 'hogehoge'@'localhost';

すると、突然エラーになるようになりました。

メッセージはこれです。

 Index for table 'db' is corrupt; try to repair it

 

原因はmysql.dbテーブルの破損?

メッセージの意味は

テーブル 'db' のインデックスが破損しています。

ですから・・きっと、そうなんでしょう。

ためしに、テーブルチェックのコマンドをうってみます。

check table mysql.db;

すると表示された結果が

+----------+-------+----------+------------------------------------------------+
| Table    | Op    | Msg_type | Msg_text                                       |
+----------+-------+----------+------------------------------------------------+
| mysql.db | check | warning  | Table is marked as crashed                     |
| mysql.db | check | error    | Wrong base information on indexpage at page: 1 |
| mysql.db | check | error    | Corrupt                                        |
+----------+-------+----------+------------------------------------------------+

わお!!

本当に破損してます。

データベースレベルの権限管理するシステムテーブルが破損・・とか、しゃれにならないですが、情報をひろってみると、意外にあるみたいです。

 

破損したテーブルを修復する

破損したままにもしておけないので、修復することにします。

rootで修復コマンドをうちます。

 repair table mysql.db;

すると

+----------+--------+----------+----------+f stage done
| Table    | Op     | Msg_type | Msg_text |
+----------+--------+----------+----------+
| mysql.db | repair | status   | OK       |
+----------+--------+----------+----------+

と表示されました。

ためしに、チェックコマンドをうってみると

check table mysql.db;

確かに修復されてます。

+----------+-------+----------+----------+tage done
| Table    | Op    | Msg_type | Msg_text |
+----------+-------+----------+----------+
| mysql.db | check | status   | OK       |
+----------+-------+----------+----------+

そのあと、GRANT文を実行すると正常に終了しました。

やれやれです。