比较 Aurora MySQL 版本 3 和 MySQL 8.0 社群版 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

比较 Aurora MySQL 版本 3 和 MySQL 8.0 社群版

您可以使用以下信息了解从不同的 MySQL 8.0 兼容系统转换为 Aurora MySQL 版本 3 时需要注意的更改。

一般来说,Aurora MySQL 版本 3 支持社群 MySQL 8.0.23 的功能集。MySQL 8.0 社群版的一些新功能不适用于 Aurora MySQL。其中一些功能与 Aurora 的某些方面不兼容,例如 Aurora 存储架构。不需要其他功能,因为 Amazon RDS 管理服务提供了同等的功能。社群 MySQL 8.0 中的以下功能不受支持或者在 Aurora MySQL 版本 3 中的工作方式有所不同。

有关所有 Aurora MySQL 版本 3 发布的发布说明,请参阅《Aurora MySQL 发布说明》中的 Amazon Aurora MySQL 版本 3 的数据库引擎更新

MySQL 8.0 功能在 Aurora MySQL 版本 3 中不可用

社群 MySQL 8.0 中的以下功能未提供或者在 Aurora MySQL 版本 3 中的工作方式有所不同。

  • Aurora MySQL 不支持资源组和相关的 SQL 语句。

  • Aurora MySQL 不支持用户定义的撤消表空间和关联的 SQL 语句,例如 CREATE UNDO TABLESPACEALTER UNDO TABLESPACE ... SET INACTIVEDROP UNDO TABLESPACE

  • 对于低于 3.06 的 Aurora MySQL 版本,Aurora MySQL 不支持撤消表空间截断。在 Aurora MySQL 3.06 及更高版本中,支持自动撤消表空间截断

  • 您无法修改任何 MySQL 插件的设置。

  • 不支持 X 插件。

  • 不支持多源复制。

基于角色的权限模型

使用 Aurora MySQL 版本 3,您无法直接修改 mysql 数据库中的表。特别是,您无法通过插入到 mysql.user 表来设置用户。相反,您可以使用 SQL 语句授予基于角色的权限。您也无法创建其他类型的对象,例如 mysql 数据库中的存储过程。您仍然可以查询 mysql 表。如果您使用二进制日志复制,则直接对源集群上的 mysql 表进行的更改不会复制到目标集群中。

在某些情况下,您的应用程序可能会使用快捷方式通过插入到 mysql 表来创建用户或其他对象。如果是这样,请更改应用程序代码以使用相应的语句,例如 CREATE USER。如果您的应用程序在 mysql 数据库中创建存储过程或其他对象,请改用其他数据库。

要在从外部 MySQL 数据库迁移期间导出数据库用户的元数据,您可以使用 MySQL Shell 命令而非 mysqldump。有关更多信息,请参阅实例转储实用程序、架构转储实用程序和表转储实用程序

为了简化对许多用户或应用程序的权限管理,您可以使用 CREATE ROLE 语句来创建具有一组权限的角色。然后,您可以使用 GRANTSET ROLE 语句以及 current_role 函数将角色分配给用户或应用程序、切换当前角色以及检查哪些角色有效。有关 MySQL 8.0 中基于角色的权限系统的更多信息,请参阅 MySQL 参考手册中的使用角色

重要

我们强烈建议不要直接在应用程序中使用主用户。请遵守使用数据库用户的最佳实践,按照您的应用程序所需的最少权限创建用户。

Aurora MySQL 版本 3 包括一个具有以下所有权限的特殊角色。该角色命名为 rds_superuser_role。每个集群的主管理用户已经授予了此角色。rds_superuser_role 角色包括所有数据库对象的以下权限:

  • ALTER

  • APPLICATION_PASSWORD_ADMIN

  • ALTER ROUTINE

  • CONNECTION_ADMIN

  • CREATE

  • CREATE ROLE

  • CREATE ROUTINE

  • CREATE TEMPORARY TABLES

  • CREATE USER

  • CREATE VIEW

  • DELETE

  • DROP

  • DROP ROLE

  • EVENT

  • EXECUTE

  • INDEX

  • INSERT

  • LOCK TABLES

  • PROCESS

  • REFERENCES

  • RELOAD

  • REPLICATION CLIENT

  • REPLICATION SLAVE

  • ROLE_ADMIN

  • SET_USER_ID

  • SELECT

  • SHOW DATABASES

  • SHOW_ROUTINE(Aurora MySQL 版本 3.04 及更高版本)

  • SHOW VIEW

  • TRIGGER

  • UPDATE

  • XA_RECOVER_ADMIN

角色定义还包括 WITH GRANT OPTION,以便管理用户可以将该角色授予其他用户。特别是,管理员必须授予以 Aurora MySQL 集群作为目标执行二进制日志复制所需的任何权限。

提示

要查看权限的完整详细信息,请输入以下语句。

SHOW GRANTS FOR rds_superuser_role@'%'; SHOW GRANTS FOR name_of_administrative_user_for_your_cluster@'%';

Aurora MySQL 版本 3 还包括可用于访问其他 Amazon 服务的角色。您可以将这些角色设置为 GRANT 语句的替代。例如,您可以指定 GRANT AWS_LAMBDA_ACCESS TO user 而不是 GRANT INVOKE LAMBDA ON *.* TO user。对于访问其他 Amazon 服务的程序,请参阅 将 Amazon Aurora MySQL 与其他Amazon服务集成。Aurora MySQL 版本 3 包括以下与访问其他 Amazon 服务相关的角色:

当您使用 Aurora MySQL 版本 3 中的角色授予访问权限时,还可以通过使用 SET ROLE role_nameSET ROLE ALL 语句来激活角色。下面的示例演示如何操作。将适当的角色名称替换为 AWS_SELECT_S3_ACCESS

# Grant role to user mysql> GRANT AWS_SELECT_S3_ACCESS TO 'user'@'domain-or-ip-address' # Check the current roles for your user. In this case, the AWS_SELECT_S3_ACCESS role has not been activated. # Only the rds_superuser_role is currently in effect. mysql> SELECT CURRENT_ROLE(); +--------------------------+ | CURRENT_ROLE() | +--------------------------+ | `rds_superuser_role`@`%` | +--------------------------+ 1 row in set (0.00 sec) # Activate all roles associated with this user using SET ROLE. # You can activate specific roles or all roles. # In this case, the user only has 2 roles, so we specify ALL. mysql> SET ROLE ALL; Query OK, 0 rows affected (0.00 sec) # Verify role is now active mysql> SELECT CURRENT_ROLE(); +--------------------------------------------------+ | CURRENT_ROLE() | +--------------------------------------------------+ | `AWS_LAMBDA_ACCESS`@`%`,`rds_superuser_role`@`%` | +--------------------------------------------------+

身份验证

在社群 MySQL 8.0 中,原定设置的身份验证插件是 caching_sha2_password。Aurora MySQL 版本 3 仍然使用 mysql_native_password 插件。您将无法更改 default_authentication_plugin 设置。