Aurora MySQL 的主要版本升级预检查
MySQL 8.0 与 MySQL 5.7 存在一定的不兼容性。在从 Aurora MySQL 版本 2 升级到版本 3 的过程中,这些不兼容性会引起问题。为了让升级成功,可能需要对数据库做一些准备。
当您开始从 Aurora MySQL 版本 2 升级到版本 3 时,Amazon Aurora 会自动运行预检查,以便检测这些不兼容性。
这些预检查是必需的。您不能选择跳过它们。预检查提供以下好处:
-
它们让您可以在升级期间避免出现计划外停机。
-
如果存在不一致项,Amazon Aurora 将阻止升级并提供日志以供您参阅。然后,您可以使用日志,通过减少不一致性来准备数据库以升级到版本 3。有关消除不兼容性的详细信息,请参阅 MySQL 文档中的准备安装以进行升级
和 MySQL Server 博客上的升级到 MySQL 8.0? 以下是您需要了解的内容… 。 有关升级到 MySQL 8.0 的更多信息,请参阅 MySQL 文档中的升级 MySQL
。
预检查包括 MySQL 内包含的一些预检查和 Aurora 团队专门创建的一些预检查。有关 MySQL 提供的预检查的信息,请参阅升级检查程序实用程序
在为了升级而停止数据库实例之前先运行预检查,这意味着它们在运行时不会造成任何停机。如果预检查发现不兼容问题,Aurora 会在停止数据库实例之前自动取消升级。Aurora 还会针对不兼容问题生成事件。有关 Amazon Aurora 事件的更多信息,请参阅使用 Amazon RDS 事件通知。
Aurora 在日志文件 PrePatchCompatibility.log
中记录有关每项不兼容性的详细信息。在大部分情况下,日志条目包括用于纠正不兼容性的 MySQL 文档的链接。有关查看日志文件的更多信息,请参阅 查看和列出数据库日志文件。
由于预检查的性质,它们会分析数据库中的对象。此分析会导致资源消耗并增加完成升级的时间。
社区 MySQL 升级预检查
以下是 MySQL 5.7 和 8.0 之间不兼容性的一般列表:
-
与 MySQL 5.7 兼容的数据库集群不得使用 MySQL 8.0 不支持的功能。
有关更多信息,请参阅 MySQL 文档中的 MySQL 8.0 中删除的功能
。 -
不得出现关键字或保留关键字违规情况。MySQL 8.0 中可能会保留一些以前未保留的关键字。
有关更多信息,请参阅 MySQL 文档中的关键字和保留关键字
。 -
要获得改进的 Unicode 支持,请考虑将使用
utf8mb3
字符集的对象转换为使用utf8mb4
字符集。utf8mb3
字符集已弃用。此外,请考虑对字符集引用使用utf8mb4
而不是utf8
,因为utf8
当前是utf8mb3
字符集的别名。有关更多信息,请参阅 MySQL 文档中的 utf8mb3 字符集(3 字节 UTF-8 Unicode 编码)
。 -
不得有非默认行格式的 InnoDB 表。
-
不得有
ZEROFILL
或display
长度类型属性。 -
不得有使用不支持本机分区的存储引擎的分区表。
-
MySQL 5.7
mysql
系统数据库中不得有与 MySQL 8.0 数据字典使用的表同名的表。 -
不得有使用过时的数据类型或函数的表。
-
不得有超过 64 个字符的外键约束名称。
-
sql_mode
系统变量设置中不得定义过时的 SQL 模式。 -
不得有包含长度超过 255 个字符的单个
ENUM
或SET
列元素的表或存储过程。 -
不得有驻留在共享 InnoDB 表空间中的表分区。
-
表空间数据文件路径中不得有循环引用。
-
不得有对
GROUP BY
子句使用ASC
或DESC
限定符的查询和存储程序定义。 -
不得有任何已移除的系统变量,并且系统变量必须使用适用于 MySQL 8.0 的新默认值。
-
不得有零(
0
)日期、日期时间或时间戳值。 -
不得有由于文件移除或损坏而导致的架构不一致。
-
不得有包含
FTS
字符串的表名称。 -
不得有属于不同引擎的 InnoDB 表。
-
不得有对于 MySQL 5.7 无效的表或架构名称。
有关升级到 MySQL 8.0 的更多信息,请参阅 MySQL 文档中的升级 MySQL
Aurora MySQL 升级预检查
Aurora MySQL 在从版本 2 升级到版本 3 时有自己的特定要求:
-
视图、例程、触发器和事件中不得有弃用的 SQL 语法,例如
SQL_CACHE
、SQL_NO_CACHE
和QUERY_CACHE
。 -
没有
FTS
索引的任何表上都不得有FTS_DOC_ID
列。 -
InnoDB 数据字典和实际表定义之间不得有列定义不匹配。
-
将
lower_case_table_names
参数设置为1
时,所有数据库和表名都必须为小写。 -
事件和触发器不得有缺失的或空的定义程序或无效的创建上下文。
-
数据库中的所有触发器名称都必须是唯一的。
-
Aurora MySQL 版本 3 不支持 DDL 恢复和快速 DDL。数据库中不得有与这些功能相关的构件。
-
采用
REDUNDANT
或COMPACT
行格式的表的索引不能大于 767 字节。 -
在
tiny
文本列上定义的索引的前缀长度不能超过 255 字节。对于utf8mb4
字符集,这会将支持的前缀长度限制为 63 个字符。在 MySQL 5.7 中,使用
innodb_large_prefix
参数可允许更大的前缀长度。MySQL 8.0 中已弃用此参数。 -
mysql.host
表中不得有 InnoDB 元数据不一致。 -
系统表中不得有列数据类型不匹配。
-
不得有 XA 事务处于
prepared
状态。 -
视图中的列名称不能超过 64 个字符。
-
存储过程中的特殊字符不能不一致。
-
表不能有数据文件路径不一致。