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

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

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

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

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

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

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

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

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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

今回は以上です。

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

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

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author