列无法从“int”类型转换为“bigint(20) unsigned”类型?

Gau*_*ani 5 mysql replication alter-table percona

我有一个 Percona MySQL 集群,有一个主节点和几个从节点。他们每个人都运行 MySQL 的“Ver 14.14 Distrib 5.5.40-36.1”。复制是基于行的。

我仅对从属设备的其中一张表运行了更改查询。计划是在所有从服务器上运行此查询,然后进行主切换,因为我们无法承受在主服务器上锁定表。

查询是:

ALTER TABLE order_item_units 
MODIFY parent_id BIGINT(20) unsigned ;
Run Code Online (Sandbox Code Playgroud)

并在我使用检查从站时发布此信息show slave status,我看到复制被破坏并出现以下错误:

表“database_name.order_item_units”的第 3 列无法从“int”类型转换为“bigint(20) unsigned”类型

当我检查该列时,它确实转换为BIGINT.

现在我无法解决这个问题。我确实停止了奴隶并启动了奴隶,没有帮助。没有停止奴隶和 MySQL 重新启动,没有帮助。做了一个跳过计数器,也没有帮助。

要么该列不应该被转换,那么错误就是正确的,但可能根本不应该有任何错误。

如果列确实被转换了,那么为什么会出现错误?

任何线索我在这里错过了什么?

小智 2

根据您的具体情况设置slave_conversion_type=ALL_NON_LOSSY会有所帮助。在从站上执行以下命令:

STOP SLAVE;
SET GLOBAL SLAVE_TYPE_CONVERSIONS=ALL_NON_LOSSY;
START SLAVE;
SHOW SLAVE STATUS\G
Run Code Online (Sandbox Code Playgroud)

文档中:

此模式允许不需要截断或对源值进行其他特殊处理的转换;也就是说,它允许目标类型比源类型具有更宽范围的转换。