MySQL 9.0 发行说明
当您尝试从旧的源复制到新的副本,并且在源上使用了在新版本 MySQL (运行在副本上) 中是保留字的标识符时,您可能会遇到问题。例如,在 MySQL 5.7 源上名为 rank
的表列复制到 MySQL 9.0 副本可能会导致问题,因为 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 Server 版本参考 中的 MySQL 8.0 中的关键字和保留字。有关标识符引用规则,请参阅 第 11.2 节,“模式对象名称”。