
【アップデート】Amazon RDSでMySQL 5.7が使用可能になりました
この記事は公開されてから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月)での対応をスピートを速めています。
今後もこの調子で機能アップデートをして欲しいですね。










