免責事項
この記事はErlend Dahl氏によるMySQL Server Blogの投稿(2015/6/17)をユーザが翻訳したものであり、Oracle公式の文書ではありません。
MySQL 5.7の最初のリリース候補版(RC)のリリースから、次のサーバーのメジャーバージョンが急速に形になってきています。5.6がGAとなってからおよそ2年半にわたって、巨大な製品とコードベースを開発し維持する負担を軽減する為に、サーバーのコードの効率化に取組んできました。
この仕事の重要なところは、廃止予定(deprecation)と削除(removal)です。 機能を廃止予定とする(deprecating)ということは、我々が外部に「この機能は現在のところ利用可能である一方、将来のリリースで廃止されるため、利用の仕方にあわせて適応して欲しい」とお知らせしていることになります。機能を削除する(removing)ということは、あるバージョンではその機能は利用可能ですが、削除されれば使おうとしたときに「その機能は存在しない」というエラーメッセージを受取ることになります。
一般的には、既存のGAリリースでは機能を削除しませんが、機能を廃止予定とし、後に開発版のリリース(しばしば次のGAとなる)で削除できます。
以前は、このステップのアプローチはとても保守的でした。大まかにいって、バージョンNで廃止予定の警告を出し、N+2のバージョンで削除していました。 しかしながら、5.7では、廃止予定、および削除に対してプロアクティブな姿勢をとってきました。5.6のリリースで廃止予定の警告を出してきた機能を、5.7で削除した例がいくつかあります。
このブログの投稿は、MySQL 5.7で実施される全ての廃止予定および削除についてのまとめとなります。これらの大多数は、Geir Høydalsvikの様々なマイルストンのブログ投稿でカバーされています。
削除された機能
InnoDBのモニタリング機能
組込みのInnoDBのテーブル名: innodb_monitor, innodb_lock_monitor, innodb_tablespace_monitor, innodb_table_monitor, そしてinnodb_mem_validateが削除されました。 歴史的には、これらの名前でCREATE TABLEを行うと(どのデータベーススキーマ内であっても)、InnoDB内部のフラグがセットされ、エラーログに追加のデバッグ情報を出力できるようになります。 DROP TABLEを行うとフラグがクリアされて出力が停止します。 この仕組みは注意して扱う必要があり、InnoDBの現在、そして将来的なリファクタリング計画を続けるのが非常に困難となるため削除されました。ゆくゆくは、
- innodb_monitorの代わりに、SET GLOBAL innodb_status_output=ON|OFFを使う
- innodb_lock_monitorの代わりに、下記を使う
- SET GLOBAL innodb_status_output=ON|OFF
- SET GLOBAL innodb_status_output_locks=ON|OFF
- innodb_tablespace_monitorとinnodb_table_monitorの2つのテーブルについては直接的な代替がありませんが、INFORMATION_SCHEMA.SYS_TABLESと、INFORMATION_SCHEMA.SYS_TABLESPACESで情報が取得可能です。INFORMATION_SCHEMA.FILESに情報を加えることも計画しています。
- innodb_mem_validateは、完全に削除されました。機能はUNIV_MEM_DEBUGフラグがコンパイル時に設定されたときのみ有効になり、これは通常のデバッグビルドでも利用されないものであるためです。
(5.7におけるinnodb_monitorテーブルの削除は、WL#7377であり、Morgan Tockerのブログ投稿もご覧ください)
旧パスワード
MySQL 5.6では、pre-4.1より古いバージョンで利用されていたパスワードハッシュ形式を廃止予定としました。5.7でこれらのパスワードのサポートが削除されました。
- サーバ側のmysql_old_password認証プラグインが削除されました。このプラグインを使ったアカウントは起動時に無効化され、サーバーはエラーログに「未知のプラグインがあります」というメッセージを出力します。
- クライアント側のmysql_old_password認証プラグインはCクライアントライブラリで削除されました。
- サーバーとクライアントプログラムへの--secure-authオプションはデフォルトの設定ですが、現在は使えなりました。廃止予定となり将来のMySQLリリースで削除さます。
- サーバーとクライアントプログラムへの--skip-secure-authオプション はサポート対象外となり、使っている場合にはエラーが発生します。
- secure_authシステム変数は、値域として1のみを許すようになり、0は許可されなくなります。
- old_passwordシステム変数の1(pre-4.1のハッシュでとる)は許可されなくなります。
- OLD_PASSWORD()関数が削除されます。
(廃止予定のold_passwordプラグインの削除は、WL#8006であり、Morgan Tockerのブログ投稿をご覧ください)
SQL文法
5.7では、ALTER TABLEへのIGNOREを削除しました。 我々はこの話題に対してコミュニティに意見を求めたMorganのブログ投稿の後に削除する決断をしました。 IGNOREを削除する決断をしたのは、これが外部キーに関する問題(親テーブルの列削除)を引き起こし、真のオンラインCREATE UNIQUE INDEXをできなくし、レプリケーションの問題を引き起こしたからです。(5.7でのALTER TABLEへのIGNOREの削除, WL#7395)
SQLモードの、ERROR_FOR_DIVISIONS_BY_ZERO、NO_ZERO_DATE、NO_ZERO_IN_DATE SQLモードは、5.7ではSTRICTモードに組み込まれました。 残念なことに、Simon Muddがbug#75439で報告している通り、この変更はレプリケーションに大きな影響を与えるため、現在この決断を考え直しています(5.7におけるERROR_FOR_DIVISION_BY_ZERO、NO_ZERO_DATE、NO_ZERO_IN_DATE SQLモードの削除とその機能のSTRICTモードへの部分化、WL#7467、についてはMorgan Tockerのブログ投稿もご覧ください)
5.7やその後のINSERT DELAYEDのサポートをやめました。 INSERT DELAYEDはたくさんの制限や問題があり、デフォルトストレージエンジンのInnoDBでは比較的影響がありません。 INSERT/REPLACE DELAYEDの記法は維持することに決め、実行の直前に警告を出し、INSERT/REPLACEに変換することにしました。(INSERT DELAYEDの削除, WL#6073)
5.7ではYEAR(2)関連のコードの残骸を全て削除しました。 YEAR(2)データ型には、表示された値の曖昧性の問題、そして値がダンプされてリロードまたは文字列に変換されたときに情報が欠損する可能性がある問題があります。 全般的に5.6でYEAR(2)のサポートをやめましたが、古いYEAR(2)への限定的なサポートを維持し、プロシージャーをMySQL 5.6にアップグレードすることができるようにしました。 この限定的なサポートも5.7で廃止されました(現的的なYEAR(2)のサポートの廃止, WL#6263)
オプションおよび変数
5.5と5.6の単一オプション接頭辞は廃止し、5.7からはフルオプションのみを認めることとしました。 かつての動作仕様は混乱を招くことが分かったため、将来サポートしません。 例えば、--compressオプションは、mysqldumpで--comprとできますが、--compは曖昧なところがある為、動作しません。しかしながら、追加のオプションプラグインを入れたときに、スクリプト内の接頭辞がサーバを再起動したときに信頼できないものとなる可能性があります。(単一オプション接頭辞の廃止、WL#6978)
timed_mutexesシステム変数は、5.5/5.6で廃止予定となっており、5.7で削除されました。このシステム変数はすでにInnoDBのソースコードからは分離されており、いかなる目的でも提供されなくなりました。(timed_mutexesシステム変数の廃止予定および削除、WL#7436)
InnoDBを無効化するサーバオプションは削除されました。システムテーブルはMyISAMからInnoDBに変更されつつあり、5.7より後のバージョンでは、MySQLサーバはInnoDB(5.5から標準のストレージエンジンである)なしに動作できなくなります。(5.6のskip-innodbと5.7におけるその削除、WL#7976)
innodb_user_sys_mallocと、innodb_additional_mem_pool_sizeシステム変数は、5.7で削除されました。InnoDBのスケーラビリティーに関わる改修を簡易化できるためです - InnoDBの自家製のメモリマネージャは、jemallocやtcmallocのようにスケーラブルではありません。(5.7のinnodb_user_sys_mallocとinnodb_additional_mem_pool_sizeシステム変数、WL#7628)
innodb_mirrored_log_groupsシステム変数は、5.6で廃止予定となり、5.7で削除されました。innodb_mirrored_log_groups変数のとりうる値は、1..10でしたが、かねてからずっと(少なくとも3.23.53からは)InnoDBの起動時に1以外の値がとれないようなチェックがありました。これは意味がないため、削除することとしました。(innodb_mirrored_log_groupsの廃止、WL#6808)
5.5で廃止予定となった、innodb_file_io_threadsシステム変数は5.7で削除されました。(5.7のinnodb_file_io_threads変数の廃止、WL#7149)
5.5で廃止予定となったstorage_engineシステム変数は最終的に5.7で削除されました。 代わりにdefault_storage_engineシステム変数をご利用ください(5.7におけるstorage_engineシステム変数の削除、WL#7148)
mysql_upgradeのときの--basedirおよび--datadirオプションは利用されていないため、削除されました。(WL#7010)
古くなったコマンドラインプログラム
これは私の同僚のTodd FarmerのSpring cleaning useless clientsというタイトルのブログ投稿で始まり、その投稿で彼はMySQLサーバとともに発出した多数のクライアントの妥当性を投げかけました。
その結果として、Morgan Tockerによるブログ投稿のいくつかのフィードバックの後に、次のクライアントは5.6で廃止予定となり、5.7で削除されました。
- mysqlaccess(WL#7620)
- mysql_convert_table_format(WL#7034)
- mysql_fix_extensions(WL#7036)
- mysql_find_rows.sh(WL#7621)
- mysql_setpermission(WL#7033)
- msql2mysql(WL#7035)
- mysqlbug(WL#7689)
- mysql_zapおよびmysql_wiatpid(WL#7826)
- mysqlhotcopy(WL#7854)
様々な削除
Windowsのシンボリックリンクの古いお手製の実装はMySQL 5.7で削除されました。Windows Vista/Server 2008から、Windowsでネイティブなシンボリックリンクメカニズムがサポートされています(imklinkコマンドを参照) MySQLはこのネイティブなWindowsのメカニズムを今後利用する予定です。(.symファイルのサポートの廃止、WL#6561`)
廃止予定の機能(直ちに削除はされません)
5.7でMySQLのクライアントサーバプロトコルにおいて、EOFパケットを新しいOKパケットに置き換えました。EOFとOKパケットはクエリの実行結果の終わりを記録する、という同一目的で機能が提供されます。つまりプロトコルはクライアントとサーバに対して後方互換性を持ち、新しいOKパケットに対するサポートを記述する為に追加の互換フラグを設けました。この互換フラグがある場合は、結果セットを返すSQL文は、データの終了地点を示す為に、EOFパケットではなくOKパケットを生成します。(EOFパケットの廃止、WL#7766、Morgan tockerのブログ投稿もあわせてご覧ください)
5.6では、Performance Schemaの利用に役立つSHOW PROFILEコマンドを廃止予定としました。5.7では、INFORMATION_SCHRMA.PROFILINGテーブルを廃止予定にすることでSHOW PROFILEコマンドの廃止を完了させました。 Peter Laursenが報告した、Bug#67525もご覧ください。(INFORMATION_SCHEMA.PROFILINGテーブルの廃止予定、WL#6802)
GIS関連の取組みが盛んになってきており、この一部としてGIS関数の名前空間の整理を始めました。これは関数名(エイリアス)を廃止予定、廃止、そして追加することで実施され、名称付与スキームに一貫性を持たせることにより、OGC標準および、他の主要なDBMSとMySQLを近づけることを目的としたものです。
データ型と同一名称(Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygonそしてGeometryCollection)を持つコンストラクタ関数と、最小囲み矩形領域を計算する関数(MBRs)を除き、全ての空間関連の関数は、標準で接頭辞「ST_」(spatio-temporal)を持つようになり、接頭辞がつかない関数は廃止予定となりました。 これにより、他のSQL/MM準拠のデータベースシステムからクエリをもってきて、MySQLデータベースで動かすのが、はるかに簡単になりました。(GIS関数の一貫的な名称付与スキーム、WL#8055、Erik Frøsethのブログ投稿であるSpring cleaning in the GIS namespaceもご覧ください)
ENCRYPT()、DES_ENCRYPT()そしてDES_DECRYPT()関数はDESに基づいていますが、AESベースの関数が推奨されるため廃止予定となりました。 AESの方が高レベルのセキュリティーであるためです。(ENCRYPT、DES_ENCRYPTそして、DES_DECRYPT関数の廃止予定、WL#8126)
ENCODE()またはDECODE()関数を実行したときに、ER_WARN_DEPRECATED_SYNTAX警告を出力するようにしました。(5.7におけるENCODE()/DECODE()の廃止予定、WL#6984)
SET PASSWORD構文および、PASSWORD()関数を廃止予定としました。既存のALTER USER文は、廃止予定となった機能をカバーするように修正されています。PASSWORD()関数は元々は、mysql.userテーブルを手動で更新する一つの方法として導入されました。これは一般的に良い方法ではなく、認証のプロパティーのみをALTER USER文を使って明示的に管理するようにして欲しいと考えています。ALTER USER文は自動的にどの認証プラグインが利用されるべきかを決定し、パスワードアルゴリズムをそれに応じて変更させます。(PASSWORD()の廃止と認証情報を管理するALTER USERの拡張、WL#6409)
次の4つのInnoDBパラメータを廃止予定としました。
- innodb_large_prefix
- innodb_file_format
- innodb_file_format_check
- innodb_file_format_max
innodb_large_prefixパラメータはMySQL 5.5から導入され、ユーザーがMySQL 5.1のInnoDBプラグインと互換性のないテーブルを誤って作ってしまうことを防ぐためのものです。 MySQL 5.1は現在ではサポートされないので、innodb_large_prefix=ON以外の値を設定する意味がありません。
innodb_file_format関連のパラメータは、MySQLと別々に配布されたMySQL 5.1のInnoDBプラグイン関連のものです。これはMySQL 5.1でユーザーがビルトインのInnoDBへダウングレードし、5.1のプラグインのテスト中に非互換のフォーマットを利用する事態をさけられるようにすることを目的としています。MySQL 5.1からInnoDBの形式は変更されてきましたが、innodb_file_formatは変更されていません。(InnoDB: 次の5.7のリリースにおける標準の値および廃止予定の設定、WL#7703)
5.7ではEXPLAINにおけるEXTENDEDとPARTITIONSキーワードは廃止予定となりました。現在ではEXPLAINにはEXTENDEDとPARITIONSフラグがあり、これを利用すると通常のEXPLAIN出力に比べ詳細な情報が出力されます。しかしながら、現在でもEXPLAIN JSONを利用することで、これらのフラグと同じように動作して利用可能な全ての情報を表示できます。通常のEXPLAINが廃止予定となった後は、これらのフラグが付与されたのと同じように動作するようになります。 つまり、全ての追加の列と警告が自動的に出力されます。(EXPLAINにおけるEXTENDEDとPARTITIONSフラグの廃止予定、WL#7207、Morgan Tockerのブログ投稿もあわせてご覧ください)。
collation_databaseとcharacter_set_databaseシステム変数を5.7で廃止予定としました。(セッション変数に対比され設定されるグローバル変数@@collation_database、@character_set_databaseは廃止予定。WL#3811、Bug#35357、Bug#27208、そしてBug#27687をMorgan Tockerのブログ投稿とあわせてご覧ください)
MySQL 5.1以前のエンコードされたデータベース/スキーマ名の変換は5.7で廃止予定となりました。(MySQL 5.1以前のエンコードされたデータベース名の廃止予定、WL#8186)
5.7におけるsync_frmシステム変数は5.7で廃止予定となりました(sync_frmシステム変数の廃止予定および削除、WL#8216)
@@session.gtid_executedシステム変数は5.7で廃止予定となりました。この変数はトランザクションキャッシュ内に現在格納されているGTIDのセットを保持しています。 しかしながら、この値はgtid_nextシステム変数の値によって完全に決定されるため、現実的な値に制限されています。 また、この名前の付け方があまり良くないため廃止予定とすることに決まりました。(@@session.gtid_executedの廃止予定、WL#7518)