设置InnoDB memcached插件
本节介绍如何daemon_memcached
在MySQL服务器上设置插件。由于memcached守护程序与MySQL服务器紧密集成,以避免网络流量并最大程度地减少延迟,因此您需要在使用此功能的每个MySQL实例上执行此过程。
注意在设置
daemon_memcached
插件之前,请查阅“ InnoDB内存缓存插件的安全注意事项”,以了解防止未经授权的访问所需的安全步骤。
先决条件
- 该
daemon_memcached
插件仅在Linux,Solaris和macOS平台上受支持。不支持其他操作系统。 从源代码构建MySQL时,必须使用
-DWITH_INNODB_MEMCACHED=ON
。这个构建选项在MySQL插件目录(plugin_dir
)中生成两个共享库,这些共享库是运行该daemon_memcached
插件所需的: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
build选项设置为system
or 来构建MySQLyes
。
安装和配置InnoDB memcached插件
配置
daemon_memcached
插件,以便它可以InnoDB
通过运行innodb_memcached_config.sql
位于中的配置脚本来与表进行交互MYSQL_HOME/share
。该脚本安装innodb_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
示例表的更多信息,请参见“ InnoDB memcached插件内部”。daemon_memcached
通过运行以下INSTALL PLUGIN
语句激活插件:mysql>
INSTALL PLUGIN daemon_memcachedsoname "libmemcached.so";插件安装完成后,每次重新启动MySQL服务器都会自动激活它。
验证InnoDB和memcached设置
要验证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会话,并使用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_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 BIGINTUNSIGNED , expiry INT,primary key (city_id) )ENGINE =InnoDB;在
innodb_memcache.containers
表中添加一个条目,以便daemon_memcached
插件知道如何访问该InnoDB
表。该条目必须满足innodb_memcache.containers
表定义。有关每个字段的描述,请参见“ 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 | | +------------------------ +-------------- +------ +----- +--------- +------- +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_memcachedsoname "libmemcached.so";使用telnet,
city
使用memcachedset
命令将数据插入表中。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 cityVALUES ('C','CHENNAI','TAMIL NADU','IN', 0, 0 ,0); mysql>INSERT INTO cityVALUES ('D','DELHI','DELHI','IN', 0, 0, 0); mysql>INSERT INTO cityVALUES ('H','HYDERABAD','TELANGANA','IN', 0, 0, 0); mysql>INSERT INTO cityVALUES ('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
配置InnoDB memcached插件
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
或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_memcachedsoname "libmemcached.so";
重新启动插件时,将保留配置设置,必需的表和数据。
有关启用和禁用插件的更多信息,请参见“MySQL服务器插件”。