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のリポジトリをインストールしましょう。
1 2 3 | 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)は割愛します。
1 | yum -y install mysql-community-server |
MySQLを起動する
1 | /etc/init .d /mysqld start |
ここまでは大丈夫だと思います。起動すれば、[OK]が表示されます。
必要なファイルを用意する
ここで、「innodb_memcached_config.sql」がどこに設置されているか確認してください。
探すときはlocateコマンドなどを使うと良いでしょう。
1 2 | $ locate innodb_memcached_config.sql /usr/share/mysql/innodb_memcached_config .sql |
ありました。今回はこの.sqlファイルが必要です。
注意
さて、ここから手順を間違えるとハマります。
MySQL5.6で報告されているバグがあるからです。
まず、お手元のMySQLサーバにtestという名前のDBがあるか確認してください。
なければ必ず作ってください。
1 2 | mysql> show databases; mysql> create database test; |
ここでtestという名のDBが用意されていないと、後々エラーが発生します。
DBとテーブルをインポート
次にMySQLのコンソール上で
1 | mysql> source /usr/share/mysql/innodb_memcached_config.sql |
と入力するかシェル上で
1 | $ mysql < /usr/share/mysql/innodb_memcached_config.sql |
と入力しましょう。
もし、testという名前のDBを作らずに実行すると、設定に失敗してしてしまいます。
(復旧にはsqlファイルを編集する必要が出てきます)
1 | $ mysql < /usr/share/mysql/innodb_memcached_config.sql |
下記のコマンドを実行した場合も失敗しますが、testDBを作成した後に再度実行すると、修正されます。
1 | 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を覗いてみると、
1 2 3 4 5 6 7 8 9 10 11 | mysql> show databases; + --------------------+ | Database | + --------------------+ | information_schema | | innodb_memcache | | mysql | | performance_schema | | test | + --------------------+ 5 rows in set (0.00 sec) |
innodb_memcacheが追加されています。
テーブルも確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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のインストール
お待たせしました。いよいよプラグインをインストールします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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は無事にインストールされたはずです。
では、どうやって確認しましょうか。
通常のサービスとは起動が異なるのでとても気になります。
どのポートが開いているか、プロセスがいるかは確認しておきましょう。
まず、ポートが開放されているか確認してみましょう。
1 2 3 4 5 | # 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を使用して動作を確認してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 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も用意されていますので、使ってみましょう。
1 2 3 4 | # yum -y install libmemcached # export MEMCACHED_SERVERS=127.0.0.1:11211 # memcat AA HELLO, HELLO |
その他にも、memslapでベンチマークを見ることができます。
よりコマンドが知りたい方は以下のコマンドも試してみましょう。
1 2 3 4 5 | memcat #読み取り memrm #削除 memstat #情報 memcp #コピー memflush #全消し |
今回は以上です。