【アップデート】Amazon RDSでMySQL 5.7が使用可能になりました
ウィスキー、シガー、パイプをこよなく愛する大栗です。
本日RDSでMySQL 5.7が使用可能になったので、早速試してみました。
RDS for MySQL 5.7で何が変わった?
RDSでは対応した主なアップデート
MySQL 5.7では様々なアップデートがあるので、一部をご紹介します。
- ネイティブでのJSON対応。様々なJSON関数が追加されています。
- 実行計画のJSON出力が可能になり、詳細情報が出力可能になりました。
- パラレルレプリケーションに対応しました。
- Boost.Geometryを使用した空間インデックスのGIS対応。
innodb_buffer_pool_size
の動的変更が可能になりました。innodb_buffer_pool_dump_pct
システム変数が追加され、バッファプルからダンプするかとパーセンテージで指定できます。- バルクデータロードのパフォーマンスが改善されています。
- ディスク書き込みスレッドが2つになりパフォーマンスが改善されています。
RDSでは対応していない主なアップデート
RDSでは対応していない主なアップデートをご紹介します。
- マルチソースレプリケーション:レプリケーションの設定は
mysql.rds_set_external_master
のみで設定可能です。 STOP SLAVE
でのレプリケーション停止不要のCHANGE MASTER TO
実行:そもそもCHANGE MASTER TO
を実行できません。- GTID関連の機能:RDS for MySQL 5.7ではGTIDを有効にできません。
起動してみる
今までと同じようにRDSの画面でMySQLを選択します。
今回は「開発/テスト」を選択します。
MySQLのバージョンは「5.7.10」が選択可能です。
DBパラメータグループはMySQL 5.7用になります。
ログインしてみます。MySQL 5.7.10になっています。
$ mysql -u awsuser -pmypassword -h mysql57.xxxxxxxxxxxx.ap-northeast-1.rds.amazonaws.com mydb Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 19 Server version: 5.7.10-log MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
実行計画のJSON出力を試してみます。
最初は普通に出力します。
mysql> explain select * from mysql.user ; +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+ | 1 | SIMPLE | user | NULL | ALL | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL | +----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+ 1 row in set, 1 warning (0.00 sec)
次にJSONフォーマットで出力します。
JSONフォーマットの場合は実行コストが表示されるので、クエリの詳細を把握する時に役立つと思われます。
mysql> explain format = json select * from mysql.user ; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPLAIN | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | { "query_block": { "select_id": 1, "cost_info": { "query_cost": "2.69" }, "table": { "table_name": "user", "access_type": "ALL", "rows_examined_per_scan": 3, "rows_produced_per_join": 3, "filtered": "100.00", "cost_info": { "read_cost": "2.09", "eval_cost": "0.60", "prefix_cost": "2.69", "data_read_per_join": "1K" }, "used_columns": [ "Host", "User", "Select_priv", "Insert_priv", "Update_priv", "Delete_priv", "Create_priv", "Drop_priv", "Reload_priv", "Shutdown_priv", "Process_priv", "File_priv", "Grant_priv", "References_priv", "Index_priv", "Alter_priv", "Show_db_priv", "Super_priv", "Create_tmp_table_priv", "Lock_tables_priv", "Execute_priv", "Repl_slave_priv", "Repl_client_priv", "Create_view_priv", "Show_view_priv", "Create_routine_priv", "Alter_routine_priv", "Create_user_priv", "Event_priv", "Trigger_priv", "Create_tablespace_priv", "ssl_type", "ssl_cipher", "x509_issuer", "x509_subject", "max_questions", "max_updates", "max_connections", "max_user_connections", "plugin", "authentication_string", "password_expired", "password_last_changed", "password_lifetime", "account_locked" ] } } } | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set, 1 warning (0.00 sec) mysql>
default_password_lifetimeに注意点!!!
MySQL 5.7での一番のハマりどころであるdefault_password_lifetime
に注意です。default_password_lifetime
はパスワードの有効期限の日数を設定するパラメータです。MySQL 5.7.11からデフォルト値が0(無制限)になったのですが、今回対応したバージョンはMySQL 5.7.10であるためデフォルト値が360日になっています。DBパラメータグループのデフォルト値は空欄になってるため360日に設定されます。
mysql> show variables like 'default_password_lifetime'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | default_password_lifetime | 360 | +---------------------------+-------+ 1 row in set (0.00 sec)
パスワードを変更していないとRDSを起動した約1年後に突如ログインできなくなるので、MySQL 5.6以前と同様の設定にするにはdefault_password_lifetime
を「0」に設定しましょう。
参考:日々の覚書: MySQL 5.7.4で導入されたdefault_password_lifetimeがじわじわくる(MySQL 5.7.11でFIX!!)
さいごに
MySQL 5.6ではMySQL 5.6のGA(2013年2月)から5ヶ月(2013年7月)かかってRDS for MySQLで対応しました。しかし、今回のMySQL 5.7ではGA(2015年10月)から4ヶ月(2016年2月)での対応をスピートを速めています。
今後もこの調子で機能アップデートをして欲しいですね。