どんな事でもお気軽にお問い合わせください
0120-803-656
24時間受付いたします

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のバージョンなどが気になる方は、
下記Oracleの公式サイトから最新版を入手可能です。アカウントを作成して入手してください。
http://dev.mysql.com/downloads/mysql/

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 #全消し

今回は以上です。


お問い合わせ 採用情報 エンジニアブログ
ISO27001認証
Contact PageTop
株式会社ビヨンド

© beyond Co., Ltd. All rights reserved.