Amazon AuroraのMySQL 5.7互換が正式リリースされました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大栗です。

先日AuroraのMySQL5.7互換がPreviewとして発表されましたが、本日正式リリースとなりましたので早速触ってみます。

MySQL 5.7互換のAmazon Aurora

今までMySQL互換のAuroraはMySQL 5.6をベースに開発されていました。MySQL 5.7互換は今後Amazon Aurora MySQL 2.xというバージョンとしてナンバリングされMySQL 5.7.12との互換性があります。現在リリースされているバージョンはAmazon Aurora MySQL 2.01となります。なお、Aurora MySQL 2.01はAurora MySQL 1.16と機能的に同等です。

今回MySQL 5.7互換のAuroraがリリースされたのは13リージョンで、Amazon Auroraの各エンジンの対応状況は以下のようになっています。MySQL 5.7が最初から東京にあるのは嬉しいのですが、PostgreSQL互換も早く来て欲しいです。。。

リージョン MySQL 5.6 MySQL 5.7 PostgreSQL
米国東部 (バージニア北部) <- New!
米国東部 (オハイオ) <- New!
米国西部 (北カリフォルニア) <- New!
米国西部 (オレゴン) <- New!
アジアパシフィック (ムンバイ) <- New!
アジアパシフィック (ソウル) <- New!
アジアパシフィック (シンガポール)
アジアパシフィック (シドニー) <- New!
アジアパシフィック (東京) <- New!
カナダ (中部) <- New!
EU (フランクフルト) <- New!
EU (アイルランド) <- New!
EU (ロンドン) <- New!
EU (パリ) <- New!
南米 (サンパウロ)

新機能

MySQL 5.7互換であるため、MySQL 5.7としての新機能が追加されています。代表的なものは以下のとおりです。

  • JSONサポート
  • 空間インデックス(Amazon Auroraは独自に空間インデックスを実装しています)
  • 生成カラム(generated column)

JSONサポートは嬉しい方が多いのではないでしょうか。多用するとリレーショナルモデルから逸脱するので適度な使用が良いと思います。

生成カラムは別のカラムの内容を基に計算した結果を取得できるカラムです。データの取り出しに柔軟性(コード -> 値の変換がアプリ側で不要など)が生まれます。

13.1.18.8 CREATE TABLE and Generated Columns

既存Auroraからの移行

Aurora MySQL 1.14、1.15、1.16のスナップショットからAurora MySQL 2.01へリストアできます。

既存のAurora MySQL 1.x系のクラスタをインプレースでアップデートしたりS3バックアップからのリストアはできません。これらは今後のAurora MySQL 2.xのリリースで可能になる予定です。

現在の制限

Aurora MySQL 2.01は、以下のMySQL 5.7.12の機能をサポートしていません。

  • グローバルトランザクション識別子 (GTIDs)
  • グループレプリケーションプラグイン
  • ページサイズの増加
  • 起動時のInnoDB buffer poolのローディング
  • InnoDB full-text parser プラグイン
  • マルチソースレプリケーション
  • オンライン buffer poolサイズ変更
  • Password validation plugin
  • Query rewrite plugins
  • レプリケーションフィルタリング
  • CREATE TABLESPACE SQL分
  • X Protocol

個人的にはMySQL Shellが気になっているのでX Protocolをサポートして欲しいなと思っています。

試してみる

パラメータグループの作成

AWS Management ConsoleでRDSのパラメータグループ画面を開きます。ここでパラメータグループの作成をクリックします。

パラメータグループファミリーにAurora MySQL 2用のaurora-mysql5.7という選択肢が増えています。ここでDB Parameter GroupとDB Cluster Parameter Groupを作成しておきます。

DBインスタンスの起動

AWS Management ConsoleでRDSの画面を開きDBインスタンスの起動をクリックします。

Amazon Auroraの中にMySQL 5.7 との互換性があるので選択します。古いルックアンドフィールではとMySQL 5.7互換を選択できません。新しいルックアンドフィールに変更しておきましょう。

この後は通常のAurora MySQL 1系と同様にDBインスタンスを設定して起動します。

ログインする

Aurora MySQL 2.01にログインしてみます。普通のMySQL 5.7と同じようにログインできます。

$ mysql -u awsuser -pmypassword -h aurora57-1.abcdefghijkl.ap-northeast-1.rds.amazonaws.com mydb
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.12 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [mydb]>

Auroraバージョンを確認すると2.01になっています。

MySQL [mydb]> select @@aurora_version;
+------------------+
| @@aurora_version |
+------------------+
| 2.01             |
+------------------+
1 row in set (0.00 sec)

インストール済みのプラグインを確認します。MySQL 5.6互換と比べるとINNODB_SYS_VIRTUAL、INNODB_TEMP_TABLE_INFO、ngramなどが増えています。

MySQL [mydb]> show plugins;
+----------------------------+----------+--------------------+-------------+-------------+
| Name                       | Status   | Type               | Library     | License     |
+----------------------------+----------+--------------------+-------------+-------------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL        | GPL         |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL        | GPL         |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_TEMP_TABLE_INFO     | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_SCHEMA_HISTORY  | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_TABLES_HISTORY  | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_COLUMNS_HISTORY | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_INDEXES_HISTORY | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_FIELDS_HISTORY  | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| INNODB_SYS_VIRTUAL         | ACTIVE   | INFORMATION SCHEMA | NULL        | GPL         |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL        | GPL         |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL        | GPL         |
| ngram                      | ACTIVE   | FTPARSER           | NULL        | GPL         |
| AWSAuthenticationPlugin    | ACTIVE   | AUTHENTICATION     | aws_auth.so | PROPRIETARY |
+----------------------------+----------+--------------------+-------------+-------------+
50 rows in set (0.00 sec)

プラグインにngramがあったのでMySQL 5.7互換ということで日本語の全文検索を試してみます。

以下のようなテーブルを作成します。

MySQL [mydb]> CREATE TABLE sample1(id int, title varchar(1024) CHARACTER SET utf8mb4, data varchar(65535) CHARACTER SET utf8mb4, FULLTEXT idx (data) WITH PARSER ngram);

データはDevelopers.IOの2018年02月06日分のタイトルと本文を入れてみました。するとmatch式で文字列を検索できました。

MySQL [mydb]> select id, title from sample1 where match(data) against('前回' IN BOOLEAN MODE);
+------+-------------------------------------------------------------+
| id   | title                                                       |
+------+-------------------------------------------------------------+
|    6 | HashiCorp Vault ServerをAmazon EC2に構築する                |
|    5 | AWS再入門2018 自動構成・デプロイサービス編                  |
+------+-------------------------------------------------------------+
2 rows in set (0.01 sec)

さいごに

待望のMySQL 5.7互換のAuroraが正式リリースとなりました。JSONサポートなどを初めとしたMySQL 5.7の機能をAuroraで使用したかった方も多かったと思います。また、MySQL 5.6互換のままAuroraが独自路線に行ってしまうのかと不安になっていた方もいたのではないかと思います。

MySQL 5.7に機能を取り込みつつAmazon Auroraとしてのメリットを活かせる進化となり今後も安心して使用できるのではないでしょうか。