MySQLは2015年に5.7、2018年4月に8.0のメジャーバージョンがGAとなり、その後も最新の8.0系についてはおよそ3ヶ月ごとのメンテナンスリリースでCHECK制約、CLONEプラグイン、INSTANT ADD COLUMNなど多くの新機能が追加されています。
一方で、新しいリリースで従来の機能が廃止または非推奨となることもあり、アップグレードの際には注意が必要となります。(大抵非推奨となった次のメジャーリリースで廃止されるため、突然問題となることは少ないです)
全てを紹介することはできませんが、目立つものや話題になったものについて幾つか挙げてみたいと思います。おおよそ5.6〜8.0の間を対象としています。
システム・ユーザ関連
mysql_upgrade
MySQLでは従来、パッケージのアップグレード後に mysql_upgrade
コマンドを実行してテーブルの互換性チェックとアップグレードを行う必要がありました。
8.0.16からは、本機能を実行することなくアップグレードすることが可能となり、 mysql_upgrade
は非推奨となりました。
環境変数 MYSQL_PWD
MySQLでは、CLIによるログイン実行時などに -p
オプションを付与しなかった場合、OSに環境変数 MYSQL_PWD
が定義されていればそれを用いてログインを試行する機能がありますが、8.0.18において本機能はセキュリティ上の観点から非推奨、かつ将来のリリースで削除予定となりました。
SUPER権限
MySQLで管理者向け機能を利用する際、多くはSUPER権限が必要でした。
8.0からは非推奨となり、代替として動的権限 (xxxx_ADMIN) の使用が推奨されています。
validate_password
(機能の廃止ではないですが、互換性のない変更のため取り上げます)
MySQL5.7で、パスワードの複雑さ(文字種、文字列長)を検証する validate_password
というプラグインが追加されましたが、8.0からはプラグインでなくコンポーネントという扱いになりました。削除する場合は、 uninstall component
コマンドを実行します。
uninstall component 'file://component_validate_password';
パラメータ関連
sql_mode='NO_AUTO_CREATE_USER'
システム変数 sql_mode
に指定することで、存在しないユーザに対するGRANT文を実行した時にユーザが自動作成されることを禁止できました。
5.7ではデフォルト設定されており、削除することで従来のGRANT文によるユーザ作成を行うことができましたが、8.0からは本パラメータが廃止され、GRANT文でユーザを作成することは完全に不可能になりました。
innodb_undo_tablespaces
InnoDBにおけるUNDO表領域の数を定義する innodb_undo_tablespaces
というパラメータがあり、5.7以前ではデフォルトが0(システム表領域内にUNDO表領域を作成する)でしたが、8.0GA以降は「デフォルト2、かつ最小値2」となり、さらに8.0.14以降は「変更不可能、かつ将来のリリースで削除予定」となりました。
データ型
旧形式の日付・時刻型
MySQL5.6.4より前に使用されていた、マイクロ秒非対応のTIME、DATETIME、および TIMESTAMPは8.0で廃止されました。
MySQL5.7にアップグレードした後、 mysql_upgrade
を実行することで新形式の日付・時刻型に修正されるため、順当にバージョンアップしている場合は問題にならないと思われます。
参考:MySQL 8.0: Removing support for old temporal datatypes
SQL関連
GROUP BY 〜 DESCの廃止
以前のMySQLでは、GROUP BY句の末尾に DESC
を付与することでORDER BY句なしに降順ソートすることができましたが、8.0.13でこの機能は廃止されました。