MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む
このページは機械翻訳したものです。
このセクションでは、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 ENDquit
統合 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「プラグインのインストールおよびアンインストール」を参照してください。