Amazon RDS MySQL 5.6と新機能を試してみた
昨日、AWSのManaged Databaseサービス RDSのアップデートが発表されました!なので、早速試したレポートを投下します!
新機能
主な新機能は以下です。
- MySQLバージョン5.6に対応
- MySQL 5.6のmemcached pluginに対応
- MySQLバイナリログの取得に対応
その他の新機能は、堀内さんのAWSブログを参照ください。
MySQLバージョン5.6のRDSを作成
まずは、MySQLバージョン5.6のRDSを作成してみましょう。作成方法は従来のRDSと特に変わりません。
RDSを作成するLaunch DB Instance WizardのDB Instance Details画面で指定するDB Engine Versionから今回の新バージョン5.6に対応するMySQL 5.6.12を選択して、残りはデフォルトのままでRDSを作成しましょう。今回はDB Instance Classはt1.micro、Allocated Storageは5GBで作成しました。
従来のMySQLバージョン5.5よりも、心なしかインスタンスの作成時間が短かった気がします。Status列がavailableになったら、接続してみましょう。
$ mysql -u testuser -h mysqltest.XXXXXXXXXXXX.ap-southeast-1.rds.amazonaws.com -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.6.12 MySQL Community Server (GPL) Copyright (c) 2000, 2013, 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>
MySQLのバージョン表記が、確かに5.6.12になっています!
memcached plugin
MySQLバージョン5.6では、memcachedと互換性のあるmemcached pluginが使用できます。これを使うと、MySQLをmemcachedの代替のキーバリューストアとして使うことができます。
RDSでは、Option Groupという設定を追加し、memcached pluginを使用することができます。
Option Groupの作成
Management ConsoleのRDSのメニューからOptions Groupsを選択します。MySQLのバージョンごとにデフォルトのOption Groupがありますが、これらは変更できないのでCreate Groupボタンから新規作成します。
Option Group名は、英数字とハイフンのみらしいです。
続いてOption Groupに、memcached pluginのオプションを追加します。Option Groupを選択して、Add Optionボタンをクリックします。
Optionを追加する画面では、memcached pluginがListenするポート番号、セキュリティグループ、オプションを設定します。
ポート番号は、memcached標準の11211番がデフォルト値ですが、AWSのドキュメントでは適宜変更することが推奨されています。
セキュリティグループは、memcache plugin用の設定が可能で、MySQLの通常のサービスとは別に設定できるところがユニークですね。一覧にはDB Security GroupとVPC Security Groupの両方が出てきますが、DBインスタンスの配置に合ったセキュリティグループを選びましょう。
RDSの構成変更
Option Groupができたら、RDSのDBインスタンスに設定していきます。今回は既存のMySQL5.6のDBインスタンスを変更し、memcached pluginを有効にします。
AWSドキュメントでは、新規DBインスタンスの作成時、既存DBインスタンスの変更時の両方でOption Groupが設定できるとありますが、検証環境では新規DBインスタンスの作成時にOption Groupの選択がグレーのInactiveになっていて、選択できませんでした。
また、db.t1.microではOption Groupの変更ができないようです。db.m1.small以上で試しましょう。
変更画面のOption Groupを、先ほど作成したものに変更します。
動作確認
まずは、MySQLのshow pluginsコマンドでmemcached pluginが有効になっているかを確認します。
mysql> show plugins; +----------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+-----------------+---------+ (中略) | daemon_memcached | ACTIVE | DAEMON | libmemcached.so | GPL | +----------------------------+----------+--------------------+-----------------+---------+ 43 rows in set (0.08 sec) mysql> exit $
確かに有効になっています。では、実際に接続してみましょう。memcachedはテキストベースのプロトコルなので、telnetコマンドで接続することができます。setでデータの投入、getでデータの表示ができます。プロンプトが出ないのでわかりにくいですが、実行例のハイライトの部分がターミナルからの入力です。
$ telnet mysqltest.XXXXXXXXXXXX.ap-southeast-1.rds.amazonaws.com 11211 Trying XX.XX.XX.XX... Connected to ec2-XX-XX-XX-XX.ap-southeast-1.compute.amazonaws.com. Escape character is '^]'. set foo 0 0 3 bar STORED get foo VALUE foo 0 3 bar quit Connection closed by foreign host. $
確かに、データが保存できていますね。さらに、データは当然MySQLのデータベースに保存されるので、mysqlコマンドでも確認することができます。RDSでは、memcached pluginのデータはtestデータベースのdemo_testテーブルに格納されます。MySQLのマニュアルからそのまま取ってつけたような命名ですが、ちゃんと動いています。
mysql> use test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | demo_test | +----------------+ 1 row in set (0.08 sec) mysql> select * from demo_test; +-----+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-----+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | foo | abc | 0 | 3 | 0 | +-----+--------------+------+------+------+ 2 rows in set (0.08 sec) mysql>
…カラム名のc1〜5ってなんじゃらほいって感じですよねw
memcached pluginでは、データの定義を別途innodb_memcacheデータベースのcontainersテーブルに持つようになっています。
mysql> use innodb_memcache Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +---------------------------+ | Tables_in_innodb_memcache | +---------------------------+ | cache_policies | | config_options | | containers | +---------------------------+ 3 rows in set (0.08 sec) mysql> select * from containers \G *************************** 1. row *************************** name: aaa db_schema: test db_table: demo_test key_columns: c1 value_columns: c2 flags: c3 cas_column: c4 expire_time_column: c5 unique_idx_name_on_key: PRIMARY 1 row in set (0.10 sec)
バイナリログの取得
バイナリログは、Automatic Backupが有効であれば取得可能です。まずは、バイナリログのファイル名をMySQLコマンドのshow binary logsで確認します。
$ mysql -u testuser -h mysqltest.XXXXXXXXXXXX.ap-southeast-1.rds.amazonaws.com -p Enter password: mysql> show binary logs; +----------------------------+-----------+ | Log_name | File_size | +----------------------------+-----------+ | mysql-bin-changelog.000008 | 479 | | mysql-bin-changelog.000009 | 422 | +----------------------------+-----------+ 2 rows in set (0.10 sec) mysql> exit
今回は、MySQLクライアント付属のmysqlbinlogコマンドで取得してみます。接続オプションはmysqlコマンドど共通、--result-fileオプションでバイナリログを保存するファイル名を指定します。
$ mysqlbinlog -h mysqltest.XXXXXXXXXXXX.ap-southeast-1.rds.amazonaws.com ¥ -u testuser -p ¥ --read-from-remote-server --result-file=binlog ¥ mysql-bin-changelog.000009 $ cat binlog /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; (以下略)
まとめ
いかがでしたでしょうか。一番大きなアップデートは、やはりMySQLバージョン5.6の対応ですが、バイナリログの取得も応用範囲が広がる魅力的な新機能だと思っています。
着実に、しかもかなりのスピードで進化を続けるRDSをがんばってキャッチアップしていきましょう!