このセクションでは、MySQL サーバーで daemon_memcached
プラグインを設定する方法について説明します。 ネットワークトラフィックを回避し、待機時間を最小限に抑えるために、memcached デーモンは MySQL サーバーと緊密に統合されているため、この機能を使用する各 MySQL インスタンスでこのプロセスを実行します。
daemon_memcached
プラグインを設定する前に、セクション15.20.5「InnoDB memcached プラグインのセキュリティーに関する考慮事項」 を参照して、不正アクセスを防ぐために必要なセキュリティー手順を理解してください。
daemon_memcached
プラグインは、Linux、Solaris および macOS プラットフォームでのみサポートされます。 その他のオペレーティングシステムはサポートされません。-
ソースから MySQL を構築する場合は、
-DWITH_INNODB_MEMCACHED=ON
を使用して構築する必要があります。 このビルドオプションでは、daemon_memcached
プラグインの実行に必要な 2 つの共有ライブラリが MySQL プラグインディレクトリ (plugin_dir
) に生成されます:libmemcached.so
: MySQL に対する memcached デーモンプラグイン。innodb_engine.so
: memcached に対するInnoDB
API プラグイン。
-
libevent
をインストールする必要があります。-
ソースから MySQL をビルドしなかった場合、
libevent
ライブラリはインストールに含まれません。 オペレーティングシステムのインストール方法を使用して、libevent
1.4.12 以上をインストールします。 たとえば、オペレーティングシステムに応じて、apt-get
、yum
またはport install
を使用できます。 たとえば、Ubuntu Linux では、次を使用します:sudo apt-get install libevent-dev
MySQL をソースコードリリースからインストールした場合、
libevent
1.4.12 はパッケージにバンドルされ、MySQL ソースコードディレクトリの最上位にあります。 バンドルされているバージョンのlibevent
を使用する場合、アクションは必要ありません。 ローカルシステムバージョンのlibevent
, を使用する場合、-DWITH_LIBEVENT
ビルドオプションをsystem
またはyes
に設定して MySQL をビルドする必要があります。
-
-
にあるMYSQL_HOME
/shareinnodb_memcached_config.sql
構成スクリプトを実行して、InnoDB
テーブルと対話できるようにdaemon_memcached
プラグインを構成します。 このスクリプトは、innodb_memcache
データベースを必要な 3 つのテーブル (cache_policies
、config_options
およびcontainers
) とともにインストールします。 また、demo_test
サンプルテーブルがtest
データベースにインストールされます。mysql> source MYSQL_HOME/share/innodb_memcached_config.sql
innodb_memcached_config.sql
スクリプトの実行は単発操作です。 後でdaemon_memcached
プラグインをアンインストールして再インストールした場合、テーブルはそのまま残ります。mysql> USE innodb_memcache; mysql> SHOW TABLES; +---------------------------+ | Tables_in_innodb_memcache | +---------------------------+ | cache_policies | | config_options | | containers | +---------------------------+ mysql> USE test; mysql> SHOW TABLES; +----------------+ | Tables_in_test | +----------------+ | demo_test | +----------------+
これらのテーブルの中で、
innodb_memcache.containers
テーブルが最も重要です。containers
テーブルのエントリは、InnoDB
テーブルのカラムへのマッピングを提供します。daemon_memcached
プラグインで使用される各InnoDB
テーブルには、containers
テーブルのエントリが必要です。innodb_memcached_config.sql
スクリプトは、demo_test
テーブルのマッピングを提供する単一のエントリをcontainers
テーブルに挿入します。 また、単一行のデータをdemo_test
テーブルに挿入します。 このデータを使用すると、設定の完了後すぐにインストールを検証できます。mysql> SELECT * FROM innodb_memcache.containers\G *************************** 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 | +----+------------------+------+------+------+
innodb_memcache
テーブルおよびdemo_test
サンプルテーブルの詳細は、セクション15.20.8「InnoDB memcached プラグインの内部」 を参照してください。 -
INSTALL PLUGIN
ステートメントを実行して、daemon_memcached
プラグインをアクティブにします:mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
プラグインがインストールされると、MySQL サーバーが再起動されるたびに自動的にアクティブ化されます。
daemon_memcached
プラグインの設定を確認するには、telnet セッションを使用して memcached コマンドを発行します。 デフォルトでは、memcached デーモンはポート 11211 でリスニングします。
-
test.demo_test
テーブルからデータを取得します。demo_test
テーブルの単一行のデータのキー値はAA
です。telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. get AA VALUE AA 8 12 HELLO, HELLO END
-
set
コマンドを使用してデータを挿入します。set BB 10 0 16 GOODBYE, GOODBYE STORED
ここでは:
set
は、値を格納するコマンドですBB
がキーです10
は操作のフラグです。memcached では無視されますが、任意のタイプの情報を示すためにクライアントで使用できます。未使用の場合は0
を指定0
は有効期限 (TTL) です。未使用の場合は0
を指定16
は、指定された値ブロックの長さ (バイト) ですGOODBYE, GOODBYE
は、格納される値です
-
MySQL サーバーに接続し、
test.demo_test
テーブルをクエリーして、挿入されたデータが MySQL に格納されていることを確認します。mysql> SELECT * FROM test.demo_test; +----+------------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +----+------------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | BB | GOODBYE, GOODBYE | 10 | 1 | 0 | +----+------------------+------+------+------+
-
telnet セッションに戻り、キー
BB
を使用して前に挿入したデータを取得します。get BB VALUE BB 10 16 GOODBYE, GOODBYE END quit
統合 memcached サーバーも停止する MySQL サーバーを停止した場合、memcached データへのアクセスの試行は接続エラーで失敗します。 通常、この時点では memcached データも表示されなくなるため、memcached の再起動時にアプリケーションロジックでデータをメモリーにロードしなおす必要があります。 ただし、このプロセスは InnoDB
memcached プラグインによって自動化されます。
MySQL を再起動すると、get
操作によって、以前の memcached セッションに格納したキーと値のペアが再度返されます。 キーがリクエストされ、関連付けられた値がメモリーキャッシュに存在しない場合、その値は MySQL test.demo_test
テーブルから自動的に問い合せられます。
この例では、daemon_memcached
プラグインを使用して独自の InnoDB
テーブルを設定する方法を示します。
-
InnoDB
テーブルを作成します。 テーブルには一意のインデックスを持つキーカラムが必要です。 市区町村テーブルのキーカラムは、主キーとして定義されているcity_id
です。 テーブルには、flags
、cas
およびexpiry
値のカラムも含まれている必要があります。 1 つ以上の値カラムがある場合があります。city
テーブルには、3 つの値カラム (name
,state
,country
) があります。注記有効なマッピングが
innodb_memcache.containers
テーブルに追加されるため、カラム名に関して特別な要件はありません。mysql> CREATE TABLE city ( city_id VARCHAR(32), name VARCHAR(1024), state VARCHAR(1024), country VARCHAR(1024), flags INT, cas BIGINT UNSIGNED, expiry INT, primary key(city_id) ) ENGINE=InnoDB;
-
daemon_memcached
プラグインがInnoDB
テーブルへのアクセス方法を認識できるように、innodb_memcache.containers
テーブルにエントリを追加します。 エントリは、innodb_memcache.containers
テーブル定義を満たす必要があります。 各フィールドの説明は、セクション15.20.8「InnoDB memcached プラグインの内部」 を参照してください。mysql> DESCRIBE innodb_memcache.containers; +------------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------------+--------------+------+-----+---------+-------+ | name | varchar(50) | NO | PRI | NULL | | | db_schema | varchar(250) | NO | | NULL | | | db_table | varchar(250) | NO | | NULL | | | key_columns | varchar(250) | NO | | NULL | | | value_columns | varchar(250) | YES | | NULL | | | flags | varchar(250) | NO | | 0 | | | cas_column | varchar(250) | YES | | NULL | | | expire_time_column | varchar(250) | YES | | NULL | | | unique_idx_name_on_key | varchar(250) | NO | | NULL | | +------------------------+--------------+------+-----+---------+-------+
city テーブルの
innodb_memcache.containers
テーブルエントリは、次のように定義されます:mysql> INSERT INTO `innodb_memcache`.`containers` ( `name`, `db_schema`, `db_table`, `key_columns`, `value_columns`, `flags`, `cas_column`, `expire_time_column`, `unique_idx_name_on_key`) VALUES ('default', 'test', 'city', 'city_id', 'name|state|country', 'flags','cas','expiry','PRIMARY');
containers.name
カラムにdefault
が指定され、daemon_memcached
プラグインで使用されるデフォルトのInnoDB
テーブルとしてcity
テーブルが構成されます。「|」デリミタを使用して、複数の
InnoDB
テーブルのカラム (name
,state
,country
) がcontainers.value_columns
にマップされます。innodb_memcache.containers
テーブルのflags
、cas_column
およびexpire_time_column
フィールドは、通常、daemon_memcached
プラグインを使用するアプリケーションでは重要ではありません。 ただし、それぞれに指定されたInnoDB
テーブルのカラムが必要です。 データを挿入するときに、これらのカラムが未使用の場合は0
を指定します。
-
innodb_memcache.containers
テーブルを更新した後、daemon_memcache
プラグインを再起動して変更を適用します。mysql> UNINSTALL PLUGIN daemon_memcached; mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
-
telnet を使用して、memcached
set
コマンドを使用してcity
テーブルにデータを挿入します。telnet localhost 11211 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. set B 0 0 22 BANGALORE|BANGALORE|IN STORED
-
MySQL を使用して、
test.city
テーブルをクエリーして、挿入したデータが格納されていることを確認します。mysql> SELECT * FROM test.city; +---------+-----------+-----------+---------+-------+------+--------+ | city_id | name | state | country | flags | cas | expiry | +---------+-----------+-----------+---------+-------+------+--------+ | B | BANGALORE | BANGALORE | IN | 0 | 3 | 0 | +---------+-----------+-----------+---------+-------+------+--------+
-
MySQL を使用して、
test.city
テーブルに追加データを挿入します。mysql> INSERT INTO city VALUES ('C','CHENNAI','TAMIL NADU','IN', 0, 0 ,0); mysql> INSERT INTO city VALUES ('D','DELHI','DELHI','IN', 0, 0, 0); mysql> INSERT INTO city VALUES ('H','HYDERABAD','TELANGANA','IN', 0, 0, 0); mysql> INSERT INTO city VALUES ('M','MUMBAI','MAHARASHTRA','IN', 0, 0, 0);
注記flags
、cas_column
およびexpire_time_column
フィールドが使用されていない場合は、これらのフィールドに0
の値を指定することをお薦めします。 -
telnet を使用して、memcached
get
コマンドを発行し、MySQL を使用して挿入したデータを取得します。get H VALUE H 0 22 HYDERABAD|TELANGANA|IN END
従来の memcached
構成オプションは、daemon_memcached_option
構成パラメータの引数でエンコードされた MySQL 構成ファイルまたは mysqld 起動文字列で指定できます。memcached
構成オプションは、MySQL サーバーが起動されるたびに発生するプラグインがロードされるときに有効になります。
たとえば、memcached がデフォルトポート 11211 ではなくポート 11222 でリスニングするようにするには、daemon_memcached_option
構成オプションの引数として -p11222
を指定します:
mysqld .... --daemon_memcached_option="-p11222"
その他の memcached オプションは、daemon_memcached_option
文字列でエンコードできます。 たとえば、同時接続の最大数の削減、キーと値のペアの最大メモリーサイズの変更、エラーログのデバッグメッセージの有効化などのオプションを指定できます。
daemon_memcached
プラグインに固有の構成オプションもあります。 これには次のものが含まれます。
daemon_memcached_engine_lib_name
:InnoDB
memcached プラグインを実装する共有ライブラリを指定します。 デフォルト設定はinnodb_engine.so
です。daemon_memcached_engine_lib_path
:InnoDB
memcached プラグインを実装する共有ライブラリを含むディレクトリのパス。 デフォルトは NULL で、プラグインディレクトリを表します。daemon_memcached_r_batch_size
: 読取り操作 (get
) のバッチコミットサイズを定義します。 commit が発生するまでの memcached 読取り操作の数を指定します。daemon_memcached_r_batch_size
はデフォルトで 1 に設定されているため、データが memcached を介して更新されたか SQL によって更新されたかに関係なく、すべてのget
リクエストがInnoDB
テーブルで最後にコミットされたデータにアクセスします。 値が 1 より大きい場合、読取り操作のカウンタはget
コールごとに増分されます。flush_all
コールは、読取りカウンタと書込みカウンタの両方をリセットします。daemon_memcached_w_batch_size
: 書込み操作 (set
,replace
,append
,prepend
,incr
,decr
など) のバッチコミットサイズを定義します。daemon_memcached_w_batch_size
はデフォルトで 1 に設定されているため、停止時にコミットされていないデータは失われず、基礎となるテーブルに対する SQL クエリーが最新のデータにアクセスします。 値が 1 より大きい場合、書込み操作のカウンタはadd
,set
,incr
,decr
およびdelete
コールごとに増分されます。flush_all
コールは、読取りカウンタと書込みカウンタの両方をリセットします。
デフォルトでは、daemon_memcached_engine_lib_name
または daemon_memcached_engine_lib_path
を変更する必要はありません。 たとえば、memcached に別のストレージエンジン (NDB memcached エンジンなど) を使用する場合は、これらのオプションを構成できます。
daemon_memcached
プラグイン構成パラメータは、MySQL 構成ファイルまたは mysqld 起動文字列で指定できます。 これらは、daemon_memcached
プラグインをロードすると有効になります。
daemon_memcached
プラグイン構成を変更する場合は、プラグインをリロードして変更を適用します。 これを行うには、次のステートメントを発行します:
mysql> UNINSTALL PLUGIN daemon_memcached;
mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
構成設定、必要なテーブルおよびデータは、プラグインの再起動時に保持されます。
プラグインの有効化および無効化についてのその他の情報は、セクション5.6.1「プラグインのインストールおよびアンインストール」を参照してください。