MySQL5.6にmemcachedプラグインをインストールする
目次
インフラチームの齊藤です。
最近はawscliコマンドにハマっています。
さて、皆さんはmemcached (pronunciation: mem-cash-dee)を使用したことはありますか?
memcachedは汎用分散キャッシュシステムです。
RAMにデータやオブジェクトをキャッシュすることでDBのロードを軽減し、
動的なアプリをスピードアップするために使用します。
memcachedが登場してから今年の2016年3月22日をもって13年目を迎えました。
memcachedはきっとあなたにとって力強い味方となってくれることでしょう。
※ちなみに私はRedisが好きです。
本稿では、サーバにssh接続をしている場合を想定し、
MySQL5.6上にmemcached pluginをインストールします。
(AWSのRDSではmemcached pluginはオプションですぐインストール出来るので楽ですよね…)
MySQLバージョン5.6をインストール
まずはMySQLのリポジトリをインストールしましょう。
wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm -P /usr/local/src cd /usr/local/src yum -y install mysql-community-release-el6-5.noarch.rpm
次に、MySQLサーバをインストールします。各種チューニング(/etc/my.cnf)は割愛します。
yum -y install mysql-community-server
MySQLを起動する
/etc/init.d/mysqld start
ここまでは大丈夫だと思います。起動すれば、[OK]が表示されます。
必要なファイルを用意する
ここで、「innodb_memcached_config.sql」がどこに設置されているか確認してください。
探すときはlocateコマンドなどを使うと良いでしょう。
$ locate innodb_memcached_config.sql /usr/share/mysql/innodb_memcached_config.sql
ありました。今回はこの.sqlファイルが必要です。
注意
さて、ここから手順を間違えるとハマります。
MySQL5.6で報告されているバグがあるからです。
まず、お手元のMySQLサーバにtestという名前のDBがあるか確認してください。
なければ必ず作ってください。
mysql> show databases; mysql> create database test;
ここでtestという名のDBが用意されていないと、後々エラーが発生します。
DBとテーブルをインポート
次にMySQLのコンソール上で
mysql> source /usr/share/mysql/innodb_memcached_config.sql
と入力するかシェル上で
$ mysql < /usr/share/mysql/innodb_memcached_config.sql
と入力しましょう。
もし、testという名前のDBを作らずに実行すると、設定に失敗してしてしまいます。
(復旧にはsqlファイルを編集する必要が出てきます)
$ mysql < /usr/share/mysql/innodb_memcached_config.sql
下記のコマンドを実行した場合も失敗しますが、testDBを作成した後に再度実行すると、修正されます。
mysql> source /usr/share/mysql/innodb_memcached_config.sql
MySQL5.6で報告されているバグの内容は以下になります。
ERROR 1049 (42000) at line 86: Unknown database 'test'
[9 Jun 2014 13:20] Daniel Price
Fixed as of the upcoming 5.7.5 release, and here's the changelog entry:The "innodb_memcached_config.sql" configuration script would fail after
running the "mysql_secure_installation" script, which removes the MySQL
"test" database. The "innodb_memcached_config.sql" script now creates the
"test" database if it does not exist.Thank you for the bug report.
参考:Bug #72678 InnoDB Memcached Plugin Configuration - test database
こちらのバグが気になる方は、MySQL5.7を使用するか、
testDBを先に作成してください。でないとmemcachedのプロセスが立ち上がりません。
さて、改めてDBを覗いてみると、
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | innodb_memcache | | mysql | | performance_schema | | test | +--------------------+ 5 rows in set (0.00 sec)
innodb_memcacheが追加されています。
テーブルも確認してみましょう。
mysql> use innodb_memcache; mysql> show tables; +---------------------------+ | Tables_in_innodb_memcache | +---------------------------+ | cache_policies | | config_options | | containers | +---------------------------+ mysql> select * from innodb_memcache.containersG *************************** 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 mysql> SELECT * FROM test.demo_test; +----+------------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +----+------------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | +----+------------------+------+------+------+
testデータベースにもちゃんとmemcachedのテストテーブルが収納されています。
memcached pluginのインストール
お待たせしました。いよいよプラグインをインストールします。
mysql> install plugin daemon_memcached soname "libmemcached.so"; mysql> show plugins; +----------------------------+----------+--------------------+-----------------+---------+ | Name | Status | Type | Library | License | +----------------------------+----------+--------------------+-----------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | mysql_native_password | ACTIVE | AUTHENTICATION | NULL | GPL | ... | INNODB_SYS_FOREIGN_COLS | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_TABLESPACES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | INNODB_SYS_DATAFILES | ACTIVE | INFORMATION SCHEMA | NULL | GPL | | partition | ACTIVE | STORAGE ENGINE | NULL | GPL | | daemon_memcached | ACTIVE | DAEMON | libmemcached.so | GPL | +----------------------------+----------+--------------------+-----------------+---------+
無事インストールされているようです。以上でプラグインインストールは終了です。
動作確認
memcachedは無事にインストールされたはずです。
では、どうやって確認しましょうか。
通常のサービスとは起動が異なるのでとても気になります。
どのポートが開いているか、プロセスがいるかは確認しておきましょう。
まず、ポートが開放されているか確認してみましょう。
# netstat -lnpt | egrep "(Proto|mysql)" Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 531/mysqld tcp 0 0 :::3306 :::* LISTEN 531/mysqld tcp 0 0 :::11211 :::* LISTEN 531/mysqld
通常memcachedは11211ポートを使用しています。
mysqldプロセスは動いているようですし、ポートも開いています。
telnetを使用して動作を確認してみましょう。
# yum -y install telnet $ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. get foo VALUE foo 0 2 hi END stats STAT pid 8861 (etc)
確かに動いているようです。
telnetは汎用性がありますが、libmemcachedも用意されていますので、使ってみましょう。
# yum -y install libmemcached # export MEMCACHED_SERVERS=127.0.0.1:11211 # memcat AA HELLO, HELLO
その他にも、memslapでベンチマークを見ることができます。
よりコマンドが知りたい方は以下のコマンドも試してみましょう。
memcat #読み取り memrm #削除 memstat #情報 memcp #コピー memflush #全消し
今回は以上です。