MySQLメジャーバージョンアップ後に必要なスクリプト

この記事は、2015年「MySQLマニュアルを読む」アドベントカレンダーの14日目です.



 13日目の日記では、とりあえず MySQL 5.6 から 5.7 にバージョンを上げたところで終了した。
よくよく考えてみれば、システム系のテーブルの変更が含まれているのだから、そのまま動かして良いわけがない。
ということで、日記が2日に分断してしまったが、今日は、アップグレード後のスクリプトについて書いてみる。

MySQL :: MySQL 5.7 Reference Manual :: 4.4.7 mysql_upgrade — Check and Upgrade MySQL Tables

マニュアル 4.4.7 に紹介されている mysql_upgrade を実行する必要があるようだ。
なお、マニュアルには mysql_upgrade の色々なオプションについて説明があるので、必要に応じてよく読んで使うと良いだろう。
今回は、オプションなしの素のままで実行してみる。

# mysql_upgrade 
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
:(略)
Upgrade process completed successfully.

 アソビゴコロを出して、試しにもう一回実行してみると、

# mysql_upgrade 
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.10, use --force if you still need to run mysql_upgrade

 もういいらしい(笑)。

# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

この mysql_upgrade スクリプトの実行により、分かりやすいところでは mysql.user テーブルの定義に変化が見られる。


スクリプト実行前:

mysql> DESC USER;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
:(略)


スクリプト実行後:

mysql> DESC USER;    
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(32)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
:(略)

 Password カラムがなくなったのが、わかる。
User名のカラムも、これまでの16文字から32文字へと拡大されていることにも気づくだろう。
Passwordカラム廃止については、Yoku0825さんが、今年(2015年)の3月の私の誕生日に書いてくれた日記にて紹介されている。
日々の覚書: MySQL 5.7.6でmysql.userテーブルのパスワードのカラム名がなんか変わった
ただし、Yoku0825さんが書かれた MySQL 5.7.6 の時点では Userカラムはまだ16文字のままだった模様。変化の足跡が見られて、面白い。



これで安心して 5.7を使える環境になった・・・・かな。