この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ウィスキー、シガー、パイプをこよなく愛する大栗です。
本日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月)での対応をスピートを速めています。
今後もこの調子で機能アップデートをして欲しいですね。