16.4.1.25 复制和保留字

当您尝试从较旧的源复制到较新的副本时,您会遇到问题,并且使用源上的标识符,这些标识符是在副本上运行的较新 MySQL 版本中的保留字。一个示例是在 5.6 源上使用名为virtual的 table 列,该 table 列复制到 5.7 或更高版本的副本,因为VIRTUAL是从 MySQL 5.7 开始的保留字。在这种情况下,复制可能会失败,并显示错误 1064,即使在复制中排除了使用保留字命名的数据库或 table 或使用保留字命名的列的 table,您的 SQL 语法也会出错...。这是由于以下事实:每个 SQL 事件都必须在执行之前由副本进行解析,以便副本知道哪个数据库对象或哪些对象将受到影响。仅在解析事件之后,副本才能应用--replicate-do-db--replicate-do-table--replicate-ignore-db--replicate-ignore-table定义的任何过滤规则。

要变通解决源上数据库,table 或列名被副本视为保留字的问题,请执行以下操作之一:

  • 在源上使用一个或多个ALTER TABLE语句来更改任何数据库对象的名称,这些名称将被视为副本上的保留字,并更改所有使用旧名称的 SQL 语句来使用新名称。

  • 在使用这些数据库对象名称的任何 SQL 语句中,请使用反引号(``'')将名称写为带引号的标识符。

有关按 MySQL 版本保留字的列 table,请参阅《 MySQL 服务器版本参考》中的Reserved Words。有关标识符引用规则,请参见第 9.2 节“架构对象名称”