MySQL 8.4 发行说明
当您尝试从旧的源复制到新的副本时,如果在源上使用了在副本上运行的新版 MySQL 中被视为保留字的标识符,您可能会遇到问题。例如,在 MySQL 5.7 源上的名为 rank
的表列复制到 MySQL 8.4 副本时,可能会出现问题,因为 RANK
在 MySQL 8.0 中成为了保留字。
在这种情况下,复制可能会失败,并出现错误 1064 您的 SQL 语法有错误...,即使使用保留字命名的数据库或表,或者具有使用保留字命名的列的表,都从复制中排除。这是因为每个 SQL 事件在执行之前都必须由副本解析,以便副本知道哪些数据库对象会被影响。只有在解析事件之后,副本才能应用由 --replicate-do-db
、--replicate-do-table
、--replicate-ignore-db
和 --replicate-ignore-table
定义的任何过滤规则。
要解决在源上使用数据库、表或列名称,而这些名称会被副本视为保留字的问题,请执行以下操作之一:
在源上使用一个或多个
ALTER TABLE
语句更改任何数据库对象的名称,这些名称在副本上会被视为保留字,并将所有使用旧名称的 SQL 语句更改为使用新名称。在所有使用这些数据库对象名称的 SQL 语句中,使用反引号 (
`
) 将名称写为带引号的标识符。
有关按 MySQL 版本列出的保留字列表,请参阅 MySQL 8.0 中的关键字和保留字,位于 MySQL 服务器版本参考 中。有关标识符引用规则,请参阅 第 11.2 节,“模式对象名称”.