ERROR 1034 (HY000): Index for table 'db' is corrupt; try to repair it
というエラーは、MariaDB の mysql.db
テーブル(データベースの権限管理を行うシステムテーブル)のインデックスが破損していることを意味します。
この問題を解決するには、mysql.db
テーブルを修復する必要があります。
解決策
① mysql.db テーブルの修復
以下のコマンドを実行して、mysql.db
テーブルを修復する。
USE mysql;
REPAIR TABLE db;
② mysqlcheck を使ってシステムテーブルを修復
MariaDB の mysqlcheck
ツールを使用して、すべてのシステムテーブルをチェック&修復できます。
MariaDB サーバーにアクセスして、以下のコマンドを実行してください。
mysqlcheck --repair --databases mysql -u root -p
パスワードを入力すると、自動的に mysql
データベースの破損したテーブルが修復されます。
③ FLUSH PRIVILEGES を実行
修復後、権限のリロードを行います。
FLUSH PRIVILEGES;
4. コマンドの再実行
修復後、もう一度 GRANT
コマンドを試してください。
GRANT ALL PRIVILEGES ON `DB名`.* TO 'ユーザ名'@'localhost' IDENTIFIED BY 'パスワード';
(※ユーザー名とホスト名はシングルクォート '
で囲む必要があります。)
補足: もし修復できない場合
1. MariaDB を再起動
修復がうまくいかない場合は、MariaDB を再起動してみてください。
sudo systemctl restart mariadb
または
sudo service mariadb restart
2. mysql_upgrade の実行
MariaDB のバージョンを更新した後にシステムテーブルの互換性問題がある場合、mysql_upgrade
を実行すると解決することがあります。
mysql_upgrade -u root -p
その後、再度 REPAIR TABLE db;
を試してください。
まとめ
REPAIR TABLE db;
を実行するmysqlcheck --repair --databases mysql -u root -p
でテーブルを修復するFLUSH PRIVILEGES;
を実行するGRANT
コマンドを再実行する- もし解決しない場合、MariaDB を再起動 or
mysql_upgrade
を試す
コメント