[mysql]Table ‘mysql.procs_priv’ doesn’t exist

mysqlをアップグレードしたらば。

mysql> FLUSH PRIVILEGES;
ERROR 1146 (42S02): Table 'mysql.procs_priv' doesn't exist

こういうエラーが出るようになった。

たぶんmysqlを4→5にアップグレードしちゃったことが原因。yum一発アップグレードは怖いなぁ。

ともあれ、Table ‘mysql.procs_priv’ doesn’t existでググったら、

MySQL Bugs: #9934: DROP USER fails if mysql.procs_priv doesn’t exists
というのが出てきて、冷たいことを言われた末に、

If you encounter this after an update, run mysql_upgrade_shell command: it will create the missing table.
(アップグレード後にこのエラーが出たんだったら、mysql_upgrade_shellコマンドを走らせろ。それで欠けてるテーブルが作成されるから)

ということになっている。

(当然バックアップをとってから)やってみた。

[furukawa@www ~]$
sudo mysql_upgrade_shell --verbose --datadir=/var/lib/mysql --user=root --password=****
Running /usr/bin/mysqlcheck  --password=**** --check-upgrade --all-databases --auto-repair --user=root
expressionengine.exp_actions
error    : Table upgrade required. Please do "REPAIR TABLE `exp_actions`" to fix it!
expressionengine.exp_captcha
error    : Table upgrade required. Please do "REPAIR TABLE `exp_captcha`" to fix it!
expressionengine.exp_categories
error    : Table upgrade required. Please do "REPAIR TABLE `exp_categories`" to fix it!
expressionengine.exp_category_field_data
:(略)
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
This script updates all the mysql privilege tables to be usable by
the current version of MySQL
done

REPAIR TABLEする必要があるらしい。

[furukawa@www ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 82
Server version: 5.0.68 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use expressionengine;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> REPAIR TABLE `exp_actions`;
+---------------------------------+--------+----------+----------+
| Table                           | Op     | Msg_type | Msg_text |
+---------------------------------+--------+----------+----------+
| expressionengine.exp_actions    | repair | status   | OK       |
+---------------------------------+--------+----------+----------+
1 row in set (0.00 sec)
:(略)

以下、この調子でテーブルを片っ端からREPAIRしていく。

columns_priv以降のテーブルはmysqlデータベースに入っている。

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> REPAIR TABLE `columns_priv`;
+--------------------+--------+----------+----------+
| Table              | Op     | Msg_type | Msg_text |
+--------------------+--------+----------+----------+
| mysql.columns_priv | repair | status   | OK       |
+--------------------+--------+----------+----------+
1 row in set (0.00 sec)
:(略)
mysql> exit
Bye
[furukawa@www ~]$
sudo mysql_upgrade_shell --verbose --datadir=/var/lib/mysql --user=root --password=****
mysql_upgrade already done for this version
This script updates all the mysql privilege tables to be usable by
the current version of MySQL
done
[furukawa@www ~]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 84
Server version: 5.0.68 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

これでいいらしい。あんまり自信がないのだけれど、エラーメッセージでググった時に日本語の情報が出てこなかったので、とりあえずブログにあげておきます。