2017年4月19日水曜日

MySQL 5.7.17からエラーログに出るようになった deprecated partition engine に関するNote

こんなやつのこと。
2017-04-18T23:54:08.224673+09:00 0 [Note] /usr/mysql/5.7.18/bin/mysqld: ready for connections.
Version: '5.7.18-log'  socket: '/usr/mysql/5.7.18/data/mysql.sock'  port: 64057  Source distribution
2017-04-18T23:54:08.224691+09:00 0 [Note] Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine. You may use the startup option '--disable-partition-engine-check' to skip this check.
2017-04-18T23:54:08.224696+09:00 0 [Note] Beginning of list of non-natively partitioned tables
2017-04-18T23:54:08.316219+09:00 0 [Note] End of list of non-natively partitioned tables
MySQL 8.0.0 で完全になくなることが決まった(というか8.0.0の時点でもうない) PARTITIONストレージエンジン を「使ってないよね? チェックするぞ?」という機能が MySQL 5.7.17 に入った。
MySQLのパーティショニングはストレージエンジンとして実装されてい ./configure --helpcmake -i を使ったことがあれば、 -DWITH_PARTITION_STORAGE_ENGINE=ON とかそういうのに憶えがあるかも知れない)
MySQL 5.7のInnoDBに関しては InnoDBネイティブパーティショニング といってPARTITIONストレージエンジンを使わずにInnoDBの内部でパーティションを表現するようになった。
「今後、パーティションを使っててもFOREIGN KEY制約がつけられるようになるかも知れない」というのは、このInnoDBネイティブパーティショニングによるもの。
フツーに mysql_upgrade をかましていれば5.7にアップグレードした時点で変換されるはずなのだが、 mysql_upgrade -s とか avoid_temporal_upgradeを使ってゴニョゴニョするとか をしている…あるいはいっこ飛ばして5.6から8.0へダイレクトジャンプするとかだと、 PARTITIONストレージエンジン によってパーティショニングされていたInnoDBのテーブルがそのまま残ってしまう。
Prior to MySQL 5.7.6, partitioned InnoDB tables used the generic ha_partition partitioning handler employed by MyISAM and other storage engines not supplying their own partitioning handlers; in MySQL 5.7.6 and later, such tables are created using the InnoDB storage engine's own (or “native”) partitioning handler. Beginning with MySQL 5.7.9, you can upgrade an InnoDB table that was created in MySQL 5.7.6 or earlier (that is, created using ha_partition) to the InnoDB native partition handler using ALTER TABLE ... UPGRADE PARTITIONING. (Bug #76734, Bug #20727344) This version of ALTER TABLE does not accept any other options and can be used only on a single table at a time. You can also use mysql_upgrade in MySQL 5.7.9 or later to upgrade older partitioned InnoDB tables to the native partitioning handler.
PARTITIONストレージエンジン そのものがなくなってしまうMySQL 8.0とそれ以降ではそのテーブルはそのままでは生きていけない……というわけで、過渡期にあたるMySQL 5.7にこのログが追加されたのだ(と思う)
default_password_lifetimeのときWe agree with the original bug reporter that the default of 360 is surprising for users upgrading from previous releases of MySQL. と言っていたので、おそらく多少 ショックの少なそうな方法 を模索した結果なんだと思う。
ちなみに PARTITIONストレージエンジン なテーブルがあってもリストされるだけ(だと思う)なので、 ALTER TABLE .. ENGINE = INNODB はセルフサービスでやる必要がある。
さて、 InnoDBネイティブパーティショニング なので、もちろんInnoDB以外のストレージエンジンはサポートされていない(というかInnoDBの実装なのだから他のストレージエンジンに手を出せるわけがない)ので、MyISAMでパーティショニングしているヤーツがもし万一あったら今のうちにInnoDBにしておくのがよろしいかと思います。

0 件のコメント :

コメントを投稿