MySQLの ST_SRS の件数が環境によって異なる件

 MySQLGIS 機能で使用する INFORMATION_SCHEMA の ST_SPATIAL_REFERENCE_SYSTEMS テーブル(ビュー)の件数が、環境によって異なることがわかりました。
 先日の、ClubMySQL #4 の発表中に「ものすごくたくさんの定義があるんですよ」と話したことから、何人かの方が早速手元の MySQL 8.0 で 同テーブルの COUNT(*) を取ってくれたのですが、人によって、

mysql> select count(*) FROM ST_SPATIAL_REFERENCE_SYSTEMS;
+----------+
| count(*) |
+----------+
|     5108 |
+----------+

だったり、

mysql> select count(*) FROM ST_SPATIAL_REFERENCE_SYSTEMS;
+----------+
| count(*) |
+----------+
|     5152 |
+----------+

だったり。


当初は、
 MySQL 8.0.11: 5108件
 MySQL 8.0.12: 5152件 
なのだろう、と軽く考えていたのですが、家に帰ってから自分の環境で確認してみたところ、MySQL 8.0.12 なのに 5108件しかありませんでした。

 そんなわけで、OSやインストール方法などにより異なるのではないかとの仮説を立てて、いくつか試したところ、まぁたぶんこうかな、という仮結論に達したので、本エントリに。

 確認したのは、WindowsMySQL Installer / Linux のバイナリインストール/同 yum インストール。

結論として、各バージョンを素の状態でインストールした場合は、
 MySQL 8.0.11: 5108件
 MySQL 8.0.12: 5152件 
ということで、間違いなさそう。

MySQL 8.0.12 なのに 5152件しかない事象は、yum で 8.0.11 をインストールした環境で、 yum update により 8.012 に上げたケース。update後に手動で動かすべきスクリプトがあるのかな、とマニュアルを軽く探してみましたが、そういう記述も見つからず、もしかして bugs 報告相当の事象?とも思ったのですが、ちょっと自信がありません。
 他のパッケージ管理システムの場合だとどうなんですかね。aptとかsuseとか。どなたか試してみていただけませんか。8.0.11を入れてから update する、という流れで、前後の ST_SPATIAL_REFERENCE_SYSTEMS の件数を確認すれば良いです。
 ちなみに、手元のWindowsMySQL Installer で 8.0.11 を入れてあった環境を、同じく MySQL Installer で最新化して 8.0.12 にしたものだったと記憶しているので、こちらが 5152件だったというのは、WIndows版のアップデートでは ST_SRSテーブルの件数を最新化する仕組みがちゃんと入っているってことなんですよね。


 ちなみに、増えた44個は、こんな感じ。GEOGCSが4つと、あとは投影座標系(PROJCS)ですね。

| VN-2000 / TM-3 zone 481                   |   5896 |
| VN-2000 / TM-3 zone 482                   |   5897 |
| VN-2000 / TM-3 zone 491                   |   5898 |
| VN-2000 / TM-3 Da Nang zone               |   5899 |
| S-JTSK [JTSK03]                           |   8351 |(GEOGCS)
| S-JTSK [JTSK03] / Krovak                  |   8352 |
| S-JTSK [JTSK03] / Krovak East North       |   8353 |
| NAD83 / NCRS Las Vegas (m)                |   8379 |
| NAD83 / NCRS Las Vegas (ftUS)             |   8380 |
| NAD83 / NCRS Las Vegas high (m)           |   8381 |
| NAD83 / NCRS Las Vegas high (ftUS)        |   8382 |
| NAD83(2011) / NCRS Las Vegas (m)          |   8383 |
| NAD83(2011) / NCRS Las Vegas (ftUS)       |   8384 |
| NAD83(2011) / NCRS Las Vegas high (m)     |   8385 |
| NAD83(2011) / NCRS Las Vegas high (ftUS)  |   8387 |
| GDA94 / WEIPA94                           |   8391 |
| ETRS89 / Gauss-Kruger CM 9E               |   8395 |
| Hong Kong Geodetic CS                     |   8427 |(GEOGCS)
| Macao 1920                                |   8428 |(GEOGCS)
| Macao 2008                                |   8431 |(GEOGCS)
| Macao 1920 / Macao Grid                   |   8433 |
| Tananarive / Laborde Grid                 |   8441 |
| RGTAAF07 / UTM zone 53S                   |   8455 |
| RGTAAF07 / UTM zone 54S                   |   8456 |
| NAD83(2011) / KS RCS zone 1               |   8518 |
| NAD83(2011) / KS RCS zone 2               |   8519 |
| NAD83(2011) / KS RCS zone 3               |   8520 |
| NAD83(2011) / KS RCS zone 4               |   8521 |
| NAD83(2011) / KS RCS zone 5               |   8522 |
| NAD83(2011) / KS RCS zone 6               |   8523 |
| NAD83(2011) / KS RCS zone 7               |   8524 |
| NAD83(2011) / KS RCS zone 8               |   8525 |
| NAD83(2011) / KS RCS zone 9               |   8526 |
| NAD83(2011) / KS RCS zone 10              |   8527 |
| NAD83(2011) / KS RCS zone 11              |   8528 |
| NAD83(2011) / KS RCS zone 12              |   8529 |
| NAD83(2011) / KS RCS zone 13              |   8531 |
| NAD83(2011) / KS RCS zone 14              |   8533 |
| NAD83(2011) / KS RCS zone 15              |   8534 |
| NAD83(2011) / KS RCS zone 16              |   8535 |
| NAD83(2011) / KS RCS zone 17              |   8536 |
| NAD83(2011) / KS RCS zone 18              |   8538 |
| NAD83(2011) / KS RCS zone 19              |   8539 |
| NAD83(2011) / KS RCS zone 20              |   8540 |

インストールメモ:

# yum install wget -y
# wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
# yum localinstall mysql80-community-release-el7-1.noarch.rpm -y
# yum install mysql-server -y

# systemctl start mysqld
# cat /var/log/mysqld.log | grep password
$ mysql -uroot -p
--
mysql> ALTER USER root@localhost IDENTIFIED BY 'MySQL8.0';
--
旧バージョンを入れるときは
# yum install mysql-community-server-8.0.11-1.el7
(以前に他のバージョンが入っていた場合はデータディレクトリを削除しておく)


追記
 @RKajiyama さんから、「mysql_upgrade を実行したらどうだ?」という情報をいただきました。

 試してみたところ、5152件と正しい件数になりました。
yumで 8.0.11 をインストール → 件数確認 → yum update で 8.0.12 に上げる → 件数確認 → mysql_upgrade を実行 → 件数確認)
あとは、これを手動でやるのが「正しい手順」なのか、本来ならこれが yum update 時に自動で実行されているべきなのか、という点ですね。

 以下参考までに実行記録:

MySQL 8.0.11のインストール@awsの t2.micro

sudo yum -y remove mariadb-libs
yum install wget -y
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
yum localinstall mysql80-community-release-el7-1.noarch.rpm -y
yum install mysql-community-server-8.0.11-1.el7 -y

systemctl start mysqld
cat /var/log/mysqld.log | grep password

mysql -uroot -p
--
mysql> ALTER USER root@localhost IDENTIFIED BY 'MySQL8.0';
mysql> use INFORMATION_SCHEMA
mysql> SELECT COUNT(*) FROM ST_SPATIAL_REFERENCE_SYSTEMS;
+----------+
| COUNT(*) |
+----------+
|     5108 |
+----------+


yumでの 8.0.12へのアップデート:

yum update mysql-server
(略)
+----------+
| COUNT(*) |
+----------+
|     5108 |
+----------+

mysql_upgrade 実行

# /bin/mysql_upgrade -uroot -p
Enter password: 
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data.
Checking system database.
mysql.columns_priv                                 OK
mysql.component                                    OK
mysql.db                                           OK
mysql.default_roles                                OK
mysql.engine_cost                                  OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.global_grants                                OK
mysql.gtid_executed                                OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.innodb_index_stats                           OK
mysql.innodb_table_stats                           OK
mysql.password_history                             OK
mysql.plugin                                       OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 OK
mysql.role_edges                                   OK
mysql.server_cost                                  OK
mysql.servers                                      OK
mysql.slave_master_info                            OK
mysql.slave_relay_log_info                         OK
mysql.slave_worker_info                            OK
mysql.slow_log                                     OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
The sys schema is already up to date (version 2.0.0).
Checking databases.
sys.sys_config                                     OK
Upgrade process completed successfully.
Checking if update is needed.
(略)
+----------+
| count(*) |
+----------+
|     5152 |
+----------+


追記yum update で MySQL サーバが再起動された後、手動で mysql_upgrade を実行する必要があるようです。(8.0.12時点)


https://dev.mysql.com/doc/refman/8.0/en/updating-yum-repo.html