【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

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

今回は以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
1,201
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author