• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 对InnoDB memcached插件进行故障排除

    本节介绍使用InnoDBmemcached插件时可能遇到的问题。

    • 如果您在MySQL错误日志中遇到以下错误,则服务器可能无法启动:

      无法为打开的文件设置rlimit。尝试以root身份运行或请求较小的maxconns值。

      错误消息来自memcached守护程序。一种解决方案是提高操作系统对打开文件数的限制。用于检查和增加打开文件限制的命令因操作系统而异。此示例显示了针对Linux和macOS的命令:

      # Linux
      shell>ulimit -n
      1024
      shell>ulimit -n 4096
      shell>ulimit -n
      4096
      
      # macOS
      shell>ulimit -n
      256
      shell>ulimit -n 4096
      shell>ulimit -n
      4096
      

      另一种解决方案是减少memcached守护程序允许的并发连接数。为此,请在MySQL配置文件的配置参数中编码-cmemcached选项daemon_memcached_option。该-c选项的默认值为1024。

      [mysqld]
      ...
      loose-daemon_memcached_option='-c 64'
      
    • 要解决memcached守护程序无法存储或检索InnoDB表数据的问题,请在MySQL配置文件的配置参数中编码-vvvmemcached选项daemon_memcached_option。检查MySQL错误日志中与memcached操作相关的调试输出。

      [mysqld]
      ...
      loose-daemon_memcached_option='-vvv'
      
    • 如果指定用于保存memcached值的列是错误的数据类型,例如数字类型而不是字符串类型,则尝试存储键值对将失败,并且没有特定的错误代码或消息。
    • 如果该daemon_memcached插件导致MySQL服务器启动问题,则可以daemon_memcached在故障排除时暂时禁用该插件,方法[mysqld]是在MySQL配置文件的组下添加此行:

      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配置参数为每个插件指定唯一的内存缓存端口daemon_memcached
    • 如果SQL语句找不到InnoDB表或表中没有数据,但是memcached API调用检索了预期的数据,则可能缺少InnoDB表中表的条目innodb_memcache.containers,或者您可能没有InnoDB通过发出切换到正确的表一个getset请求使用表示法。如果您更改了表中的现有条目而未随后重新启动MySQL服务器,也可能会出现此问题。自由格式存储机制足够灵活,您的请求可以存储或检索多列值,例如@@table_idinnodb_memcache.containerscol1|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_columnexpire_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的插件拒绝的使用NULLcas_columnexpire_time_column列。将这些列的值设置0为未使用时的列。

    • 随着memcached键的长度和值的增加,您可能会遇到大小和长度限制。

      • 当密钥超过250个字节时,memcached操作将返回错误。目前,这是memcached中的固定限制。
      • InnoDB如果值超过768个字节,3072个字节或innodb_page_size值的一半,可能会遇到表限制。这些限制主要适用于打算在值列上创建索引以使用SQL在该列上运行报表生成查询的情况。有关详细信息,请参见“ InnoDB限制”。
      • 键值组合的最大大小为1 MB。
    • 如果您在不同版本的MySQL服务器之间共享配置文件,则使用该daemon_memcached插件的最新配置选项可能会导致旧版MySQL出现启动错误。为避免兼容性问题,请在loose选项名称前使用前缀。例如,使用loose-daemon_memcached_option='-c 64'代替daemon_memcached_option='-c 64'
    • 没有验证字符集设置的限制或就位检查。memcached以字节为单位存储和检索键和值,因此对字符集不敏感。但是,必须确保memcached客户端和MySQL表使用相同的字符集。
    • 内存缓存连接被阻止访问包含索引虚拟列的表。访问索引的虚拟列需要对服务器进行回调,但是内存缓存连接无法访问服务器代码。