InnoDB
本节介绍您在使用memcached插件
时可能遇到的问题。
如果您在 MySQL 错误日志中遇到以下错误,则服务器可能无法启动:
未能为打开的文件设置 rlimit。尝试以 root 身份运行或请求较小的 maxconns 值。
错误消息来自memcached 守护进程。一种解决方案是提高操作系统对打开文件数的限制。检查和增加打开文件限制的命令因操作系统而异。此示例显示了适用于 Linux 和 macOS 的命令:
# Linux $> ulimit -n 1024 $> ulimit -n 4096 $> ulimit -n 4096 # macOS $> ulimit -n 256 $> ulimit -n 4096 $> ulimit -n 4096
另一个解决方案是减少memcached 守护程序 允许的并发连接数。为此,请 在 MySQL 配置文件的配置参数中对
-c
memcached选项 进行编码。daemon_memcached_option
该-c
选项的默认值为 1024。[mysqld] ... loose-daemon_memcached_option='-c 64'
要解决 memcached守护程序无法存储或检索表数据的问题,请 在 MySQL 配置文件的配置参数中对memcached选项
InnoDB
进行编码 。检查 MySQL 错误日志以获取与 memcached操作相关的调试输出。-vvv
daemon_memcached_option
[mysqld] ... loose-daemon_memcached_option='-vvv'
如果指定用于保存memcached 值的列是错误的数据类型,例如数字类型而不是字符串类型,则尝试存储键值对会失败,并且没有特定的错误代码或消息。
如果插件导致 MySQL 服务器启动问题,您可以通过在 MySQL 配置文件中 的组下添加以下行来在故障排除
daemon_memcached
时暂时禁用该 插件:daemon_memcached
[mysqld]
daemon_memcached=OFF
例如,如果您在运行配置脚本
INSTALL PLUGIN
之前运行该语句innodb_memcached_config.sql
以设置必要的数据库和表,则服务器可能会意外退出并无法启动。如果您错误地配置了表中的条目,服务器也可能无法启动innodb_memcache.containers
。要为 MySQL 实例卸载memcached插件,请发出以下语句:
mysql> UNINSTALL PLUGIN daemon_memcached;
如果您在同一台机器上运行多个 MySQL 实例并且
daemon_memcached
每个实例都启用了插件,请使用 配置参数为每个插件daemon_memcached_option
指定一个唯一的 memcached端口 。daemon_memcached
如果 SQL 语句找不到
InnoDB
表或在表中找不到数据,但 memcachedInnoDB
API 调用检索到预期的数据,则表中 可能缺少该表的条目innodb_memcache.containers
,或者您可能没有InnoDB
通过发出命令切换到正确的表aget
或set
请求使用 符号。如果您更改表中的现有条目 而没有随后重新启动 MySQL 服务器,也可能会发生此问题。自由格式存储机制足够灵活,您可以请求存储或检索多列值,例如@@
table_id
innodb_memcache.containers
col1|col2|col3
可能仍然有效,即使守护进程正在使用test.demo_test
将值存储在单个列中的表。当定义您自己的
InnoDB
表以与daemon_memcached
插件一起使用时,表中的列定义为NOT NULL
,确保NOT NULL
在将表的记录插入表中时为列 提供值innodb_memcache.containers
。如果记录的INSERT
语句innodb_memcache.containers
包含的分隔值少于映射列的数量,则未填充的列设置为NULL
。尝试将NULL
值插入NOT NULL
列会导致INSERT
失败,这可能只有在您重新初始化daemon_memcached
插件以将更改应用到innodb_memcache.containers
表后才会变得明显。如果表的
cas_column
和expire_time_column
字段innodb_memcached.containers
设置为NULL
,则在尝试加载memcached 插件时返回以下错误:InnoDB_Memcached: column 6 in the entry for config table 'containers' in database 'innodb_memcache' has an invalid NULL value.
memcached插件拒绝 在 和列
NULL
中使用。将这些列的值设置为未使用列时的值。cas_column
expire_time_column
0
随着memcached键和值的长度增加,您可能会遇到大小和长度限制。
当键超过 250 字节时, memcached操作会返回错误。目前这是 memcached中的固定限制。
InnoDB
如果值超过 768 字节、3072 字节或innodb_page_size
值的一半,则可能会遇到表限制。如果您打算在值列上创建索引以使用 SQL 在该列上运行报告生成查询,则这些限制主要适用。有关详细信息,请参阅 第 14.23 节,“InnoDB 限制”。键值组合的最大大小为 1 MB。
如果您在不同版本的 MySQL 服务器之间共享配置文件,则使用
daemon_memcached
插件的最新配置选项可能会导致旧 MySQL 版本启动错误。为避免兼容性问题,请使用loose
带有选项名称的前缀。例如,使用loose-daemon_memcached_option='-c 64'
而不是daemon_memcached_option='-c 64'
。没有限制或检查来验证字符集设置。memcached以字节为单位存储和检索键和值,因此对字符集不敏感。但是,您必须确保 memcached客户端和 MySQL 表使用相同的字符集。
memcached连接被阻止访问包含索引虚拟列的表。访问索引虚拟列需要回调到服务器,但memcached连接无权访问服务器代码。