当我在amazonrds readreplica上执行以下查询时,它会给我一个错误 Apply Error 1677: Column 59 of table sales_orders cannot be converted from type datetime to type varchar(10)
我正在读取副本上执行的查询
ALTER TABLE `sales_orders`
ADD COLUMN `dw_base_currency` VARCHAR(10) NULL AFTER `source`,
ADD COLUMN `dw_base_total` DECIMAL(12,4) NULL AFTER `dw_base_currency`;
我已经检查了mysql replication(tokudb replica)的answer中描述的表的字符集:表“database.table”的x列不能从类型“varchar(y)”转换为类型“varchar(y)”,但在我的例子中,表的字符集是相同的。
1条答案
按热度按时间2exbekwf1#
复制查询引起的更改时,如果主机选择登录事件
ROW
格式化时,列名不会写入日志,而只写入值,这些值按表定义中每列的顺序位置排序。这意味着复制副本可以比主副本有更多或更少的列,但如果这是真的,则差异必须限制在表中最右边的列。
您对复制副本的更改显然在中间的某个位置引入了新列,这是无效的。
您可以将表从主副本复制到从副本,以便表的主副本和从副本具有不同的列数,但必须满足以下条件:
表的两个版本共用的列必须在主表和从表上以相同的顺序定义。
(即使两个表的列数相同,也是如此。)
必须在定义任何其他列之前,先定义表的两个版本的公共列。
这意味着执行
ALTER TABLE
在两个表共用的列范围内将新列插入表中的从属语句会导致复制失败[…]https://dev.mysql.com/doc/mysql-replication-excerpt/5.7/en/replication-features-more-columns.html