Amazon Aurora MySQL 参考
本参考包含有关 Aurora MySQL 参数和状态变量的信息。
Aurora MySQL 参数
您可以使用数据库参数组中的参数按照与管理其他 Amazon RDS 数据库实例相同的方法管理 Amazon Aurora MySQL 数据库集群。Amazon Aurora 不同于其他数据库引擎,因为您具有一个包含多个数据库实例的数据库集群。因此,您用于管理 Aurora MySQL 数据库集群的有些参数将应用于整个集群。其他参数则仅应用于数据库集群中的特定数据库实例。
要管理集群级参数,请使用数据库集群参数组。要管理实例级参数,请使用数据库参数组。Aurora MySQL 数据库集群中的每个数据库实例均与 MySQL 数据库引擎兼容。不过,您在集群级别应用某些 MySQL 数据库引擎参数,并使用数据库集群参数组管理这些参数。您无法在 Aurora 数据库集群中实例的数据库参数组中查找集群级参数。本主题后面提供了集群级参数的列表。
您可以使用 AWS 管理控制台、AWS CLI 或 Amazon RDS API 管理集群级参数和实例级参数。您可以使用单独的命令管理集群级参数和实例级参数。例如,您可以使用 modify-db-cluster-parameter-group CLI 命令来管理数据库集群参数组中的集群级参数。您可以使用 modify-db-parameter-group CLI 命令来为数据库集群中的数据库实例管理数据库参数组中的实例级参数。
您可以在控制台中或者使用 CLI 或 RDS API 查看集群级别和实例级别的参数。例如,您可以使用 describe-db-cluster-parameters AWS CLI 命令来查看数据库集群参数组中的集群级参数。您可以使用 describe-db-parameters CLI 命令来查看数据库集群中数据库实例的数据库参数组中的实例级参数。
有关数据库参数组的更多信息,请参阅 使用数据库参数组和数据库集群参数组。有关 Aurora Serverless 集群的规则和限制,请参阅 Aurora Serverless 和参数组。
集群级参数
下表显示了适用于整个 Aurora MySQL 数据库集群的所有参数。
参数名称 | 可修改 | 备注 |
---|---|---|
|
是 |
不适用于作为 Aurora 全局数据库的一部分的集群。 |
|
是 |
不适用于作为 Aurora 全局数据库的一部分的集群。 |
|
是 |
有关更多信息,请参阅Amazon Aurora MySQL 复制的高可用性注意事项。 |
|
是 |
有关更多信息,请参阅将数据从 Amazon S3 存储桶中的文本文件加载到 Amazon Aurora MySQL 数据库集群。 |
|
是 |
有关更多信息,请参阅将数据从 Amazon Aurora MySQL 数据库集群保存到 Amazon S3 存储桶中的文本文件。 |
|
是 |
|
|
是 |
|
|
是 |
有关更多信息,请参阅从 Amazon Aurora MySQL 数据库集群中调用 Lambda 函数。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 集群对所有数据使用 InnoDB 存储引擎。 |
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
有关将日志上传到 CloudWatch Logs 的说明,请参阅 将 Amazon Aurora MySQL 日志发布到 Amazon CloudWatch Logs。 |
|
否 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
实例级参数
下表显示了适用于 Aurora MySQL 数据库集群中特定数据库实例的所有参数。
参数名称 | 可修改 | 备注 |
---|---|---|
|
否 |
|
|
是 |
有关更多信息,请参阅Amazon Aurora MySQL 实验室模式。 |
|
是 |
有关更多信息,请参阅 Amazon Aurora MySQL 内存不足问题 。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
有时 |
在 Aurora MySQL 版本 2.04 及更高版本中可修改。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
有关将日志上传到 CloudWatch Logs 的说明,请参阅 将 Amazon Aurora MySQL 日志发布到 Amazon CloudWatch Logs。 |
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
是 |
|
|
有时 |
在 Aurora MySQL 版本 2.04 及更高版本中可修改。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
是 |
|
|
否 |
Aurora MySQL 完全不使用 InnoDB 更改缓冲区。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
否 |
Aurora MySQL 根据集群类型管理数据库实例的只读和读写状态。例如,预置的集群具有一个读写数据库实例(主实例),并且集群中的所有其他实例都是只读的(Aurora 副本)。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
有关更多信息,请参阅至 Aurora MySQL 数据库实例的最大连接数。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
否 |
Aurora MySQL 管理连接属性,并为集群中的所有数据库实例强制执行一致的设置。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 根据集群类型管理数据库实例的只读和读写状态。例如,预置的集群具有一个读写数据库实例(主实例),并且集群中的所有其他实例都是只读的(Aurora 副本)。 |
|
是 |
|
|
否 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
否 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
有关将日志上传到 CloudWatch Logs 的说明,请参阅 将 Amazon Aurora MySQL 日志发布到 Amazon CloudWatch Logs。 |
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
Aurora MySQL 使用不在其中直接访问文件系统的托管实例。 |
|
是 |
|
|
是 |
|
|
是 |
|
|
是 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
否 |
|
|
是 |
不适用的 MySQL 参数和状态变量
由于 Aurora MySQL 与 MySQL 之间存在架构差异,某些 MySQL 参数和状态变量不适用于 Aurora MySQL。
以下 MySQL 参数不适用于 Aurora MySQL:
-
innodb_adaptive_flushing
-
innodb_adaptive_flushing_lwm
-
innodb_change_buffering
-
innodb_checksum_algorithm
-
innodb_doublewrite
-
innodb_flush_method
-
innodb_flush_neighbors
-
innodb_io_capacity
-
innodb_io_capacity_max
-
innodb_log_buffer_size
-
innodb_log_file_size
-
innodb_log_files_in_group
-
innodb_max_dirty_pages_pct
-
innodb_use_native_aio
-
innodb_write_io_threads
-
thread_cache_size
以下 MySQL 状态变量不适用于 Aurora MySQL:
-
innodb_buffer_pool_bytes_dirty
-
innodb_buffer_pool_pages_dirty
-
innodb_buffer_pool_pages_flushed
注意
这些列表并不详尽。
Aurora MySQL 事件
以下是 Aurora MySQL 的一些常见等待事件。
注意
有关 MySQL 等待事件中使用的命名约定的信息,请参阅 MySQL 文档中的性能架构测试命名约定。
- io/aurora_redo_log_flush
-
在该等待事件中,某个会话正等待数据写入 Aurora 存储。通常,该等待事件针对 Aurora MySQL 中的写入 I/O 操作。
- io/aurora_respond_to_client
-
在该等待事件中,线程正将结果集返回给客户端。
- io/file/csv/data
-
在该等待事件中,有正写入 CSV 表的线程。检查您的 CSV 表使用情况。此事件的典型原因是在表上设置 log_output。
- io/file/innodb/innodb_data_file
-
在该等待事件中,有正等待至存储的 I/O 操作的线程。此事件在 I/O 密集型工作负载中更普遍。显示此等待事件较大部分的 SQL 语句可能运行磁盘密集型查询。或者,它们可能请求无法从 InnoDB 缓冲池得到满足的数据。要查明情况,请检查查询计划和缓存命中率。有关更多信息,请参阅 MySQL 文档中的缓冲和缓存。
- io/file/sql/binlog
-
在该等待事件中,有等待正写入磁盘的二进制日志文件的线程。
- io/socket/sql/client_connection
-
在该等待事件中,线程正处理新连接。
- io/table/sql/handler
-
这是表 I/O 等待事件。通常,这些类型的事件可以后接嵌套事件(如文件 I/O 事件)。有关性能架构中的“原子”和“分子”事件的更多信息,请参阅 MySQL 文档中的性能架构原子和分子事件。
- lock/table/sql/handler
-
该等待事件是表锁定等待事件处理程序。有关性能架构中的“原子”和“分子”事件的更多信息,请参阅 MySQL 文档中的性能架构原子和分子事件。
- synch/cond/mysys/my_thread_var::suspend
-
在该等待事件中,将在线程等待条件时暂停线程。例如,此事件发生在线程等待表级别锁定时。建议调查工作负载,以了解哪些线程可能正获取数据库实例上的表锁定。有关 MySQL 中的表锁定的更多信息,请参阅 MySQL 文档中的表锁定问题。
- synch/cond/sql/MDL_context::COND_wait_status
-
在该等待事件中,有正等待表元数据锁定的线程。有关更多信息,请参阅 MySQL 文档中的优化锁定操作。
- synch/cond/sql/MYSQL_BIN_LOG::COND_done
-
在该等待事件中,有等待正写入磁盘的二进制日志文件的线程。二进制日志记录争用可能出现在更改率非常高的数据库上。
- synch/mutex/innodb/aurora_lock_thread_slot_futex
-
在该等待事件中,一个线程正在等待 InnoDB 记录锁定。如果看到该事件,请检查数据库是否存在发生冲突的工作负载。有关更多信息,请参阅 MySQL 文档中的 InnoDB 锁定。
- synch/mutex/innodb/buf_pool_mutex
-
在该等待事件中,线程已在 InnoDB 缓冲池上获取锁定。
- synch/mutex/sql/LOCK_open
-
在该等待事件中,LOCK_open 正用于保护数据字典中的各个对象。该等待事件指示有正等待获取这些锁定的线程。通常,此事件由数据字典争用导致。
- synch/mutex/sql/LOCK_table_cache
-
在该等待事件中,有正等待在表缓存实例上获取锁定的线程。有关更多信息,请参阅 MySQL 文档中的 MySQL 如何打开和关闭表。
- synch/mutex/sql/LOG
-
在该等待事件中,有正等待日志锁定的线程。例如,线程可能等待锁定写入慢速查询日志文件。
- synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit
-
在该等待事件中,有正等待带着提交到二进制日志的意图获取锁定的线程。二进制日志记录争用可能出现在更改率非常高的数据库上。根据您的 MySQL 版本,有特定锁定用于保护二进制日志的一致性和持续性。在 RDS MySQL 中,二进制日志用于复制和自动备份过程。在 Aurora MySQL 中,本机复制或备份不需要二进制日志。它们默认情况下处于禁用状态,但可以启用或用于外部复制或更改数据捕获。有关更多信息,请参阅 MySQL 文档中的二进制日志。
- synch/mutex/sql/MYSQL_BIN_LOG::LOCK_log
-
在该等待事件中,线程正积极锁定二进制日志文件。二进制日志记录争用可能出现在更改率非常高的数据库上。根据您的 MySQL 版本,有特定锁定用于保护二进制日志的一致性和持续性。
- synch/rwlock/innodb/dict
-
在该等待事件中,有正等待 InnoDB 数据字典中保留的 rwlock 的线程。
- synch/rwlock/innodb/dict sys RW lock
-
在该等待事件中,有正等待 InnoDB 数据字典中保留的 rwlock 的线程。
- synch/rwlock/innodb/dict_operation_lock
-
在该等待事件中,有在 InnoDB 数据字典操作中保留锁定的线程。
Aurora MySQL 存储过程
您可以在连接到 Aurora MySQL 集群中的主实例时,调用以下存储过程。这些过程控制事务如何从外部数据库复制到 Aurora MySQL,或从 Aurora MySQL 复制到外部数据库。要了解如何根据 Aurora MySQL 中的全局事务标识符 (GTID) 使用复制,请参阅 在 Aurora MySQL 中使用基于 GTID 的复制。
主题
mysql.rds_set_master_auto_position
将复制模式设置为基于二进制日志文件位置或全局事务标识符 (GTID)。
语法
CALL mysql.rds_set_master_auto_position (auto_position_mode);
参数
- auto_position_mode
-
该值指示是使用日志文件位置复制还是基于 GTID 的复制:
-
0
– 使用基于二进制日志文件位置的复制方法。默认为0
。 -
1
– 使用基于 GTID 的复制方法。
-
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
主用户必须运行 mysql.rds_set_master_auto_position
过程。
对于 Aurora,Aurora MySQL 版本 2.04 及更高版本的 MySQL 5.7 兼容版本支持此过程。Aurora MySQL 1.1 或 1.0 不支持基于 GTID 的复制。
mysql.rds_set_external_master_with_auto_position
将 Aurora MySQL 主实例配置为接受来自外部 MySQL 实例的传入复制。此过程还会根据全局事务标识符 (GTID) 配置复制。
此过程对于 Amazon RDS MySQL 和 Aurora MySQL 均可用。它在不同上下文中的作用可能不同。在用于 Aurora MySQL 时,此过程不会配置延迟复制。此限制是由于 Amazon RDS MySQL 支持延迟复制,但 Aurora MySQL 不支持。
语法
CALL mysql.rds_set_external_master_with_auto_position ( host_name , host_port , replication_user_name , replication_user_password , ssl_encryption );
参数
- host_name
-
在 Aurora 之外运行以变为复制主实例的 MySQL 实例的主机名或 IP 地址。
- host_port
-
在 Aurora 之外运行的要配置为复制主实例的 MySQL 实例使用的端口。如果网络配置包括转换端口号的安全 Shell (SSH) 端口复制,请指定由 SSH 公开的端口号。
- replication_user_name
-
在对 Aurora 外部运行的 MySQL 实例上具有
REPLICATION CLIENT
和REPLICATION SLAVE
权限的用户的 ID。建议您向专用于复制的账户提供外部实例。 - replication_user_password
-
在
replication_user_name
中指定的用户 ID 的密码。 - ssl_encryption
-
目前未实施该选项。默认值为 0。
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
主用户必须运行 mysql.rds_set_external_master_with_auto_position
过程。主用户在充当复制目标的 Aurora MySQL 数据库集群的主实例上运行此过程。这可能是外部 MySQL 数据库实例或 Aurora MySQL 数据库集群的复制目标。
对于 Aurora,Aurora MySQL 版本 2.04 及更高版本的 MySQL 5.7 兼容版本支持此过程。Aurora MySQL 1.1 或 1.0 不支持基于 GTID 的复制。
在运行 mysql.rds_set_external_master_with_auto_position
前,请将外部 MySQL 数据库实例配置为复制主实例。要连接到外部 MySQL 实例,应指定 replication_user_name
和 replication_user_password
值。这些值必须指示具有外部 MySQL 实例上的 REPLICATION CLIENT
和 REPLICATION
SLAVE
权限的复制用户。
将外部 MySQL 实例配置为复制主实例
-
通过使用所选的 MySQL 客户端,连接到外部 MySQL 实例并创建要用于复制的用户账户。以下是示例。
CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
-
在外部 MySQL 实例上,向复制用户授予
REPLICATION CLIENT
和REPLICATION SLAVE
权限。以下示例为您的域的'repl_user'
用户授予所有数据库的REPLICATION CLIENT
和REPLICATION SLAVE
权限。GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com' IDENTIFIED BY 'SomePassW0rd'
在调用 mysql.rds_set_external_master_with_auto_position
时,Amazon RDS 将记录某些信息。这些信息包括 mysql.rds_history
和 mysql.rds_replication_status
表中的时间、用户和 "set master"
操作。
要跳过已知会导致问题的基于 GTID 的特定事务,您可以使用 mysql.rds_skip_transaction_with_gtid 存储过程。有关使用基于 GTID 的复制的更多信息,请参阅在 Aurora MySQL 中使用基于 GTID 的复制。
示例
在 Aurora 主实例上运行时,下例示例将 Aurora 集群配置为充当在 Aurora 之外运行的某个 MySQL 实例的只读副本。
call mysql.rds_set_external_master_with_auto_position( 'Externaldb.some.com', 3306, 'repl_user'@'mydomain.com', 'SomePassW0rd');
mysql.rds_skip_transaction_with_gtid
在 Aurora 主实例上跳过复制具有指定全局事务标识符 (GTID) 的事务。
在已知特定 GTID 事务导致问题时,您可以使用该过程进行灾难恢复。请使用该存储过程跳过有问题的事务。有问题的事务示例包括禁用复制、删除重要数据或导致数据库实例变得不可用的事务。
语法
CALL mysql.rds_skip_transaction_with_gtid (gtid_to_skip);
参数
- gtid_to_skip
-
要跳过的复制事务的 GTID。
使用说明
对于 Aurora MySQL 数据库集群,您将在连接到主实例时调用此存储过程。
主用户必须运行 mysql.rds_skip_transaction_with_gtid
过程。
对于 Aurora,Aurora MySQL 版本 2.04 及更高版本的 MySQL 5.7 兼容版本支持此过程。Aurora MySQL 1.1 或 1.0 不支持基于 GTID 的复制。