MySQLのInnovation ReleaseとなるMySQL 9.
MySQL 9.2の新機能
最初に、MySQL 9.
CREATE_SPATIAL_REFERENCE_SYSTEM権限の追加
GIS管理のために追加された新しい動的権限です。この権限を持つユーザーは以下のステートメントを実行できます。
- CREATE SPATIAL REFERENCE SYSTEM
- CREATE OR REPLACE SPATIAL REFERENCE SYSTEM
- DROP SPATIAL REFERENCE SYSTEM
SUPER権限を持つユーザーもこれらのステートメントを実行できますが、SUPER権限は非推奨となっているため、適切な権限設定をするのが望ましいでしょう。
EXPLAIN FORMAT=JSON フォーマットバージョン情報の追加
explain_
に設定されている場合、EXPLAIN FORMAT=JSON
の出力にフォーマットバージョン情報が追加されます。explain_
オプションは、EXPLAIN FORMAT=JSON
ステートメントで使用されるJSON出力形式のバージョンを指定します。取り得る値は1または2です。1はMySQLの以前のバージョンのスタイルで、2はアクセスパスに基づいており、MySQL Optimizerの将来のバージョンとの互換性を高めることを目的としています。
explain_
が1と2の場合のEXPLAIN FORMAT=JSON
の出力を比較してみます。
explain_json_format_version=1
の場合mysql> SET @@explain_json_format_version = 1; Query OK, 0 rows affected (0.00 sec) mysql> EXPLAIN FORMAT=JSON SELECT 1\G *************************** 1. row *************************** EXPLAIN: { "query_block": { "select_id": 1, "message": "No tables used" } } 1 row in set, 1 warning (0.00 sec)
explain_json_format_version=2
の場合mysql> SET @@explain_json_format_version = 2; Query OK, 0 rows affected (0.00 sec) mysql> EXPLAIN FORMAT=JSON SELECT 1\G *************************** 1. row *************************** EXPLAIN: { "query": "/* select#1 */ select 1 AS `1`", "query_plan": { "operation": "Rows fetched before execution", "access_type": "rows_fetched_before_execution", "estimated_rows": 1.0, "estimated_total_cost": 0.0, "estimated_first_row_cost": 0.0 }, "query_type": "select", "json_schema_version": "2.0" } 1 row in set (0.00 sec)
FLUSH PRIVILEGESステートメントの非推奨化
FLUSH PRIVILEGES
ステートメントは MySQL 9.
FLUSH PRIVILEGES
ステートメントは mysqlシステムスキーマの権限テーブルから権限を再読み取りします。ユーザーテーブルなどを直接更新し、権限とユーザーの更新を有効にするために使用されていました。しかし、直接ユーザーテーブルを更新することは推奨されていないため、FLUSH PRIVILEGES
は非推奨になりました。ユーザー情報を変更する際は、CREATE USER、GRANT、REVOKEステートメントを利用してください。これらのステートメントは即時に有効になり、権限テーブルから権限を再読み取りは必要ありません。
BINLOGキーワードの制限追加
BINLOGキーワードが制限され、MySQLストアドプログラムのラベルとして引用符なしで使用できなくなりました。MySQL 9.
MySQL 9.3の新機能
つづいて、MySQL9.
mysqldumpによるユーザーアカウントの論理ダンプ
これまでは、ユーザーアカウントのみをダンプするにはpt-show-grantsを利用することが多かったと思います。pt-show-grantsについては以前の記事 第160回 pt-show-grantsを使ってユーザアカウントを移行する をご参照ください。
MySQL 9.--users
オプションを使うことで、指定したユーザーアカウントの情報をCREATE USER
とGRANT
ステートメントの形式でダンプできます。
オプションも複数あり、--add-drop-user
オプションを使用すると、CREATE USER
ステートメントの前にDROP USER
を追加できます。--usersオプションだけを使用すると、すべてのユーザーアカウントの情報がダンプに含まれますが、以下の追加オプションで選択的にダンプすることも可能です。
- --include-user=user@host:特定のユーザーアカウント情報のみを含める。複数のアカウントを含める場合は、このオプションを複数回使用します。
- --exclude-user=user@host:特定のユーザーアカウント情報を除外する。複数のアカウントを除外する場合は、このオプションを複数回使用します。
ユーザーアカウントのバックアップやデータベース移行時には、こちらを利用するとよいでしょう。
ANYおよびALLサブクエリの最適化
optimizer_
まとめ
今回はMySQL 9.
ただ、この記事はMySQL Community Editionにフォーカスしているため説明から省きましたが、MySQL 9.
以下ドキュメントを参考にしました。詳しく知りたい方はご参照ください。