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