MySQL 8.0 リファレンスマニュアル


15.20.3 InnoDB memcached プラグインの設定

このセクションでは、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-getyum または port install を使用できます。 たとえば、Ubuntu Linux では、次を使用します:

      sudo apt-get install libevent-dev
    • MySQL をソースコードリリースからインストールした場合、libevent 1.4.12 はパッケージにバンドルされ、MySQL ソースコードディレクトリの最上位にあります。 バンドルされているバージョンの libevent を使用する場合、アクションは必要ありません。 ローカルシステムバージョンの libevent, を使用する場合、-DWITH_LIBEVENT ビルドオプションを system または yes に設定して MySQL をビルドする必要があります。

InnoDB memcached プラグインのインストールおよび構成

  1. MYSQL_HOME/share にある innodb_memcached_config.sql 構成スクリプトを実行して、InnoDB テーブルと対話できるように daemon_memcached プラグインを構成します。 このスクリプトは、innodb_memcache データベースを必要な 3 つのテーブル (cache_policiesconfig_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 プラグインの内部」 を参照してください。

  2. INSTALL PLUGIN ステートメントを実行して、daemon_memcached プラグインをアクティブにします:

    mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";

    プラグインがインストールされると、MySQL サーバーが再起動されるたびに自動的にアクティブ化されます。

InnoDB および memcached 設定の検証

daemon_memcached プラグインの設定を確認するには、telnet セッションを使用して memcached コマンドを発行します。 デフォルトでは、memcached デーモンはポート 11211 でリスニングします。

  1. 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
  2. set コマンドを使用してデータを挿入します。

    set BB 10 0 16
    GOODBYE, GOODBYE
    STORED

    ここでは:

    • set は、値を格納するコマンドです

    • BB がキーです

    • 10 は操作のフラグです。memcached では無視されますが、任意のタイプの情報を示すためにクライアントで使用できます。未使用の場合は 0 を指定

    • 0 は有効期限 (TTL) です。未使用の場合は 0 を指定

    • 16 は、指定された値ブロックの長さ (バイト) です

    • GOODBYE, GOODBYE は、格納される値です

  3. 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 |
    +----+------------------+------+------+------+
  4. 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 テーブルを設定する方法を示します。

  1. InnoDB テーブルを作成します。 テーブルには一意のインデックスを持つキーカラムが必要です。 市区町村テーブルのキーカラムは、主キーとして定義されている city_id です。 テーブルには、flagscas および 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;
  2. 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 テーブルの flagscas_column および expire_time_column フィールドは、通常、daemon_memcached プラグインを使用するアプリケーションでは重要ではありません。 ただし、それぞれに指定された InnoDB テーブルのカラムが必要です。 データを挿入するときに、これらのカラムが未使用の場合は 0 を指定します。

  3. innodb_memcache.containers テーブルを更新した後、daemon_memcache プラグインを再起動して変更を適用します。

    mysql> UNINSTALL PLUGIN daemon_memcached;
    
    mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
  4. 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
  5. MySQL を使用して、test.city テーブルをクエリーして、挿入したデータが格納されていることを確認します。

    mysql> SELECT * FROM test.city;
    +---------+-----------+-----------+---------+-------+------+--------+
    | city_id | name      | state     | country | flags | cas  | expiry |
    +---------+-----------+-----------+---------+-------+------+--------+
    | B       | BANGALORE | BANGALORE | IN      |     0 |    3 |      0 |
    +---------+-----------+-----------+---------+-------+------+--------+
  6. 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);
    注記

    flagscas_column および expire_time_column フィールドが使用されていない場合は、これらのフィールドに 0 の値を指定することをお薦めします。

  7. telnet を使用して、memcached get コマンドを発行し、MySQL を使用して挿入したデータを取得します。

    get H
    VALUE H 0 22
    HYDERABAD|TELANGANA|IN
    END

InnoDB memcached プラグインの構成

従来の 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「プラグインのインストールおよびアンインストール」を参照してください。


関連キーワード:  InnoDB, テーブル, 構成, データ, city, containers, 設定, memcache, インストール, 操作