14.21.3 设置 InnoDB 内存缓存插件

本节介绍如何在 MySQL 服务器上设置daemon_memcached插件。由于 memcached 守护程序已与 MySQL 服务器紧密集成,以避免网络流量并最大程度地减少了延迟,因此您需要在每个使用此功能的 MySQL 实例上执行此过程。

Note

在设置daemon_memcached插件之前,请咨询第 14.21.4 节“ InnoDB 内存缓存插件的安全注意事项”以了解防止未授权访问所需的安全步骤。

Prerequisites

sudo apt-get install libevent-dev

安装和配置 InnoDB memcached 插件

mysql> source MYSQL_HOME/share/innodb_memcached_config.sql

运行innodb_memcached_config.sql脚本是一次性操作。如果您以后卸载并重新安装daemon_memcached插件,则 table 将保留在原位。

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      |
+----------------+

在这些 table 中,innodb_memcache.containerstable 是最重要的。 containerstable 中的条目提供了对InnoDBtable 列的 Map。与daemon_memcached插件一起使用的每个InnoDBtable 都需要在containerstable 中有一个条目。

innodb_memcached_config.sql脚本在containerstable 中插入一个条目,该条目为demo_testtable 提供了 Map。还将单行数据插入demo_testtable 中。此数据使您可以在安装完成后立即验证安装。

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_memcachetable 和demo_test示例 table 的更多信息,请参见第 14.21.7 节“ InnoDB memcached 插件内部”

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

插件安装完成后,每次重新启动 MySQL 服务器都会自动激活它。

验证 InnoDB 和内存缓存设置

要验证daemon_memcached插件的设置,请使用 telnet 会话发出 memcached 命令。默认情况下, memcached 守护程序在端口 11211 上侦听。

telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get AA
VALUE AA 8 12
HELLO, HELLO
END
set BB 10 0 16
GOODBYE, GOODBYE
STORED

where:

mysql> SELECT * FROM test.demo_test;
+----+------------------+------+------+------+
| c1 | c2               | c3   | c4   | c5   |
+----+------------------+------+------+------+
| AA | HELLO, HELLO     |    8 |    0 |    0 |
| BB | GOODBYE, GOODBYE |   10 |    1 |    0 |
+----+------------------+------+------+------+
get BB
VALUE BB 10 16
GOODBYE, GOODBYE
END
quit

如果您关闭 MySQL 服务器(该服务器还关闭了集成的 memcached 服务器),则进一步尝试访问 memcached 数据的尝试将失败,并出现连接错误。通常,“ memcached”数据此时也会消失,并且当“ memcached”重新启动时,您将需要应用程序逻辑将数据加载回内存中。但是,InnoDB memcached 插件可以自动为您完成此过程。

当您重新启动 MySQL 时,get操作再次返回您存储在较早的 memcached 会话中的键/值对。当请求密钥并且关联值尚未在内存缓存中时,将从 MySQL test.demo_testtable 中自动查询该值。

创建新的 table 和列 Map

此示例显示了如何使用daemon_memcached插件设置自己的InnoDBtable。

Note

对列名没有特殊要求,因为将有效 Map 添加到innodb_memcache.containerstable 中。

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;
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    |       |
+------------------------+--------------+------+-----+---------+-------+

城市 table 的innodb_memcache.containerstable 项定义为:

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');
mysql> UNINSTALL PLUGIN daemon_memcached;

mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set B 0 0 22
BANGALORE|BANGALORE|IN
STORED
mysql> SELECT * FROM test.city;
+---------+-----------+-----------+---------+-------+------+--------+
| city_id | name      | state     | country | flags | cas  | expiry |
+---------+-----------+-----------+---------+-------+------+--------+
| B       | BANGALORE | BANGALORE | IN      |     0 |    3 |      0 |
+---------+-----------+-----------+---------+-------+------+--------+
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);

Note

如果未使用flagscas_columnexpire_time_column字段,建议为它们指定0的值。

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

配置 InnoDB 内存缓存插件

可以在 MySQL 配置文件或mysqld启动字符串中指定传统的memcached配置选项,该配置文件编码在daemon_memcached_option配置参数的参数中。 memcached配置选项在加载插件时生效,每次启动 MySQL 服务器时都会生效。

例如,要使 memcached 监听端口 11222 而不是默认端口 11211,请指定-p11222作为daemon_memcached_option配置选项的参数:

mysqld .... --daemon_memcached_option="-p11222"

其他 memcached 选项可以编码在daemon_memcached_option字符串中。例如,您可以指定选项以减少同时连接的最大数量,更改键值对的最大内存大小或为错误日志启用调试消息,等等。

还有针对daemon_memcached插件的配置选项。这些包括:

默认情况下,您不需要修改daemon_memcached_engine_lib_namedaemon_memcached_engine_lib_path。例如,如果您想对内存缓存使用不同的存储引擎(例如 NDB 内存缓存引擎),则可以配置这些选项。

可以在 MySQL 配置文件或mysqld启动字符串中指定daemon_memcached插件配置参数。它们在您加载daemon_memcached插件时生效。

更改daemon_memcached插件配置时,请重新加载插件以应用更改。为此,发出以下语句:

mysql> UNINSTALL PLUGIN daemon_memcached;

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

重新启动插件时,将保留配置设置,必需的 table 和数据。

有关启用和禁用插件的其他信息,请参见第 5.5.1 节“安装和卸载插件”

首页