本节介绍如何在 MySQL 服务器上设置
daemon_memcached
插件。因为memcached守护进程与 MySQL 服务器紧密集成以避免网络流量并最大限度地减少延迟,所以您在使用此功能的每个 MySQL 实例上执行此过程。
在设置daemon_memcached
插件之前,请参阅第 14.21.4 节,“InnoDB memcached 插件的安全注意事项”以了解防止未经授权访问所需的安全程序。
该
daemon_memcached
插件仅在 Linux、Solaris 和 macOS 平台上受支持。不支持其他操作系统。从源代码构建 MySQL 时,必须使用
-DWITH_INNODB_MEMCACHED=ON
.plugin_dir
此构建选项在运行插件所需的 MySQL 插件目录 ( ) 中生成两个共享库daemon_memcached
:libmemcached.so
: MySQL 的 memcached守护进程插件。innodb_engine.so
: memcachedInnoDB
的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
或 来构建 MySQLyes
。
配置
daemon_memcached
插件,使其可以InnoDB
通过运行innodb_memcached_config.sql
配置脚本与表交互,该脚本位于
. 此脚本安装MYSQL_HOME
/shareinnodb_memcache
具有三个必需表(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
每个InnoDB
表 都需要在表中有一个条目。daemon_memcached
containers
该
innodb_memcached_config.sql
脚本在表中插入单个条目,为containers
表提供映射demo_test
。它还将单行数据插入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
示例表的更多信息,请参阅 第 14.21.7 节,“InnoDB memcached 插件内部”。通过运行以下语句 激活
daemon_memcached
插件:INSTALL PLUGIN
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
是存储的值
test.demo_test
通过连接MySQL服务器并查询表 ,验证插入的数据是否存储在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 会话并检索您之前使用 key 插入的数据
BB
。get BB VALUE BB 10 16 GOODBYE, GOODBYE END quit
如果关闭 MySQL 服务器,这也会关闭集成的memcached服务器,进一步尝试访问memcached数据将失败并出现连接错误。通常,memcached数据此时也会消失,您需要应用程序逻辑在memcached重新启动
时将数据加载回内存
。但是,
InnoDB
memcached插件会为您自动执行此过程。
当您重新启动 MySQL 时,get
操作将再次返回您存储在较早的
memcached会话中的键值对。当请求一个键并且关联的值不在内存缓存中时,会自动从 MySQL
test.demo_test
表中查询该值。
此示例显示如何
使用插件
设置您自己的InnoDB
表格
。daemon_memcached
创建一个
InnoDB
表。该表必须有一个带有唯一索引的键列。city 表的键列是city_id
,定义为主键。该表还必须包含flags
、cas
和expiry
值的列。可能有一个或多个值列。该city
表具有三个值列 (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;
向表中添加一个条目,
innodb_memcache.containers
以便daemon_memcached
插件知道如何访问该InnoDB
表。该条目必须满足innodb_memcache.containers
表定义。有关每个字段的说明,请参阅 第 14.21.7 节,“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');
default
为containers.name
列指定以将表配置为与插件 一起使用city
的默认InnoDB
表 。daemon_memcached
多个
InnoDB
表列 (name
,state
,country
)containers.value_columns
使用 “ | ”分隔符。表的
flags
、cas_column
和expire_time_column
字段 在使用插件innodb_memcache.containers
的应用程序中通常不重要 。但是,每个都需要daemon_memcached
一个指定的表列。InnoDB
插入数据时,0
如果未使用,请指定这些列。
更新
innodb_memcache.containers
表后,重新启动daemon_memcache
插件以应用更改。mysql> UNINSTALL PLUGIN daemon_memcached; mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
使用 telnet,使用memcached命令 将数据插入
city
表中。set
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);
笔记如果未使用,建议您
0
为flags
、cas_column
和expire_time_column
字段指定一个值。使用 telnet,发出memcached
get
命令以检索您使用 MySQL 插入的数据。get H VALUE H 0 22 HYDERABAD|TELANGANA|IN END
传统memcached
的配置选项可以在 MySQL 配置文件或
mysqld启动字符串中指定,编码在
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_name
:指定实现InnoDB
memcached 插件的共享库。默认设置为innodb_engine.so
。daemon_memcached_engine_lib_path
:包含实现InnoDB
memcached插件的共享库的目录路径。默认为NULL,代表插件目录。daemon_memcached_r_batch_size
:定义读取操作的批量提交大小 (get
)。它指定 发生提交之前的memcached读取操作 数。 默认情况下设置为 1,以便每个 请求访问表中最近提交 的数据,无论数据是通过memcached还是通过 SQL 更新的。当该值大于 1 时,读取操作的计数器会随着每次调用而递增。调用重置读取和写入计数器 。daemon_memcached_r_batch_size
get
InnoDB
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
or
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.5.1 节,“安装和卸载插件”。