このページは機械翻訳したものです。
このセクションでは、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 に対するInnoDBAPI プラグイン。
-
libeventをインストールする必要があります。-
ソースから MySQL をビルドしなかった場合、
libeventライブラリはインストールに含まれません。 オペレーティングシステムのインストール方法を使用して、libevent1.4.12 以上をインストールします。 たとえば、オペレーティングシステムに応じて、apt-get、yumまたはport installを使用できます。 たとえば、Ubuntu Linux では、次を使用します:sudo apt-get install libevent-dev MySQL をソースコードリリースからインストールした場合、
libevent1.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.sqlinnodb_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:InnoDBmemcached プラグインを実装する共有ライブラリを指定します。 デフォルト設定はinnodb_engine.soです。daemon_memcached_engine_lib_path:InnoDBmemcached プラグインを実装する共有ライブラリを含むディレクトリのパス。 デフォルトは 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「プラグインのインストールおよびアンインストール」を参照してください。