Amazon Relational Database Service
用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

MySQL MEMCACHED 支持

Amazon RDS 支持对 InnoDB 表使用 memcached 接口,该接口已在 MySQL 5.6 中引入。通过 memcached API,应用程序可以按照 NoSQL 密钥值数据存储的类似使用方式来使用 InnoDB 表。

memcached 是基于键的简单缓存。应用程序使用 memcached 插入、操作和检索缓存中的“键-值”数据对。MySQL 5.6 引入了一个插件来实现一个守护进程服务,该服务通过 memcached 协议公开 InnoDB 表中的数据。有关 MySQL memcached 插件的更多信息,请转至 InnoDB 与 memcached 的集成

实现对 Amazon RDS MySQL 5.6 或更高版本实例的 memcached 支持

  1. 确定用于控制对 memcached 接口的访问的安全组。如果已在使用 SQL 接口的系列应用程序与访问 memcached 接口的相同,则可使用 SQL 接口所用的现有 VPC 或数据库安全组。如果访问 memcached 接口的系列应用程序与之不同,则请定义新的 VPC 或数据库安全组。有关管理安全组的更多信息,请参阅 使用 Amazon RDS 安全组控制访问

  2. 创建自定义数据库选项组,引擎类型选择 MySQL 并选择 5.6 或更高版本。有关创建选项组的更多信息,请参阅 创建选项组

  3. MEMCACHED 选项添加到该选项组。指定 memcached 接口将使用的端口以及用于控制对接口的访问的安全组。有关添加选项的更多信息,请参阅 将选项添加到选项组

  4. 如有必要,修改选项设置以配置 memcached 参数。有关如何修改选项设置的更多信息,请参阅 修改选项设置

  5. 将选项组应用于实例。在应用选项组时,Amazon RDS 会为该实例启用 memcached 支持:

  6. 指定 MySQL 表中哪些列可以通过 memcached 接口进行访问。memcached 插件会在名为 containers 的专用数据库中创建名为 innodb_memcache 的目录表。在 containers 表中插入行,使之映射通过 memcached 访问的 InnoDB 表。在 InnoDB 表中指定用于存储 memcached 键值的列,并指定一个或多个用于存储与该键关联的数据值的列。您还指定一个 memcached 应用程序用于引用列集的名称。有关在 containers 表中插入行的详细信息,请转到 InnoDB 内存缓存插件内部信息。有关映射 InnoDB 表和通过 memcached 访问该表的示例,请转至为 InnoDB + memcached 应用程序指定表和列映射

  7. 如果访问 memcached 接口的应用程序与使用 SQL 接口的应用程序位于不同的计算机或 EC2 实例上,请将这些计算机的连接信息添加到与 MySQL 实例关联的 VPC 或数据库安全组。有关管理安全组的更多信息,请参阅 使用 Amazon RDS 安全组控制访问

您通过修改该实例并指定 MySQL 版本的默认选项组来关闭实例的 memcached 支持。有关修改 MySQL 实例的更多信息,请参阅 修改运行 MySQL 数据库引擎的数据库实例

MySQL memcached 安全考虑事项

memcached 协议不支持用户身份验证。有关 MySQL memcached 安全注意事项的更多信息,请转至 memcached 部署使用 memcached 作为 MySQL 缓存层

您可以采取下列操作来帮助提高 memcached 接口的安全性:

  • 在向选项组添加 MEMCACHED 选项时,指定一个与默认 11211 不同的端口。

  • 确保将 memcached 接口与用于限制对巳知的可信客户端地址或 EC2 实例的访问的 VPC 或者数据库安全组关联。有关管理安全组的更多信息,请参阅 使用 Amazon RDS 安全组控制访问

MySQL memcached 连接信息

要访问 memcached 接口,应用程序必须同时指定 Amazon RDS 实例的 DNS 名称和 memcached 端口号。例如,如果实例的 DNS 名称为 my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com,并且内存缓存接口使用端口 11212,PHP 中指定的连接信息将为:

<?php $cache = new Memcache; $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212); ?>

查找 Amazon RDS MySQL 实例的 DNS 名称和 memcached 端口

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在 AWS 管理控制台中的右上角,选择包含该数据库实例的地区。

  3. 在导航窗格中,选择 Instances

  4. 单击 MySQL 数据库实例名称以显示其详细信息。

  5. 连接部分中,记下终端节点字段的值。DNS 名称与终端节点相同。另请注意,连接部分中的端口未用于访问 memcached 接口。

  6. 详细信息部分,记下选项组字段中列出的名称。

  7. 在导航窗格中,单击选项组

  8. 单击 MySQL 数据库实例所用的选项组名称,显示该选项组的详细信息。在选项部分,记下 MEMCACHED 选项的端口设置值。

MySQL 内存缓存选项设置

Amazon RDS 将 MySQL memcached 参数公开为 Amazon RDS MEMCACHED 选项中的选项设置。

MySQL 内存缓存参数

  • DAEMON_MEMCACHED_R_BATCH_SIZEmemcached - 整数型,用于指定在执行 COMMIT 操作启动新的事务前应执行多少个 读取操作 (获取)。容许的值是 1 到 4294967295,默认值为 1。此选项在重新启动实例后生效。

  • DAEMON_MEMCACHED_W_BATCH_SIZEmemcached - 整数型,用于指定在执行 COMMIT 操作启动新的事务前应执行多少个 写入操作 (获取),如添加、设置或者 incr。容许的值是 1 到 4294967295,默认值为 1。此选项在重新启动实例后生效。

  • INNODB_API_BK_COMMIT_INTERVALmemcached - 整数型,用于指定多长时间自动提交一次使用 InnoDB 接口的闲置连接。容许的值是 1 到 1073741824,默认为 5。该选项会立即生效,无需重新启动实例。

  • INNODB_API_DISABLE_ROWLOCK - 一个布尔值,该值在使用 InnoDB memcached 接口时禁用 (1 (true)) 或启用 (0 (false)) 行锁。默认为 0 (false)。此选项在重新启动实例后生效。

  • INNODB_API_ENABLE_MDL - 一个布尔值,设置为 0(false) 会锁定 InnoDB memcached 插件使用的表,以便 DDL 无法通过 SQL 接口卸除或者更改该表。默认为 0 (false)。此选项在重新启动实例后生效。

  • INNODB_API_TRX_LEVELmemcached - 整数型,指定 接口处理的查询的事务隔离级别。容许值是 0 到 3。默认值为 0。此选项在重启实例后生效。

Amazon RDS 配置以下 MySQL memcached 参数,这些参数无法修改:DAEMON_MEMCACHED_LIB_NAMEDAEMON_MEMCACHED_LIB_PATHINNODB_API_ENABLE_BINLOG。在 Amazon RDS 中,也以单个 MEMCACHED 选项设置是形式提供 MySQL 管理员使用 daemon_memcached_options 设置的参数。

MySQL daemon_memcached_options 参数

  • BINDING_PROTOCOL - 字符串,指定要使用的绑定协议。允许的值是 autoasciibinary。默认值为 auto,这意味着服务器与客户端自动协商协议。此选项在重新启动实例后生效。

  • BACKLOG_QUEUE_LIMIT - 一个整数,用于可等待 memcached 处理的网络连接的数目。增大此限值会减少无法连接到 memcached 实例的客户端所收到的错误,但不会提高服务器性能。容许的值是 1 到 2048,默认值为 1024。此选项在重新启动实例后生效。

  • CAS_DISABLED - 启用 (1 (true)) 或禁用 (0 (false)) 比较和交换 (CAS) 的使用的布尔值,它使每个项目大小减少了 8 个字节。默认为 0 (false)。此选项在重新启动实例后生效。

  • CHUNK_SIZE - 整数型,指定最小项目的密钥、值和旗标所分配的最小区块大小 (计算单位:字节)。容许值是 1 到 48。默认为 48,且可以使用较低的值显著地提高内存效率。此选项在重新启动实例后生效。

  • CHUNK_SIZE_GROWTH_FACTOR - 浮点型,控制新区块的大小。新区块的大小是前一区块时间的大小 CHUNK_SIZE_GROWTH_FACTOR。允许的值介于 1 到 2 之间,默认值为 1.25。此选项在重新启动实例后生效。

  • ERROR_ON_MEMORY_EXHAUSTED - 一个布尔值,当该值设置为 1 (true) 时,将指定在没有更多内存来存储项目时 memcached 将返回错误,而不会返回移出项目。如果设置为 0(false),当没有更多内存时,memcached 将移出项目。默认为 0 (false)。此选项在重新启动实例后生效。

  • MAX_SIMULTANEOUS_CONNECTIONS - 整数型,指定同时连接的最大数。将这个值设置为低于 10 的任何数值可防止 MySQL 启动。容许的值是 10 到 1024,默认为 1024。此选项在重新启动实例后生效。

  • VERBOSITY - 一个字符串,指定 memcached 服务在 MySQL 错误日志中记录的信息级别。默认值为 v。此选项在重新启动实例后生效。容许值为:

    • v - 执行主事件循环时出现的日志错误和警告。

    • vv - 除了 v 记录的信息之外,还会记录每个客户端命令和响应。

    • vvv - 除了 v 记录的信息之外,还会记录内部状态迁移。

Amazon RDS 配置这些 MySQL DAEMON_MEMCACHED_OPTIONS 参数,且无法进行修改:DAEMON_PROCESSLARGE_MEMORY_PAGESMAXIMUM_CORE_FILE_LIMITMAX_ITEM_SIZELOCK_DOWN_PAGE_MEMORYMASKIDFILEREQUESTS_PER_EVENTSOCKETUSER