Replication with More Columns on Source or Replica

https://dev.mysql.com/doc/mysql-replication-excerpt/5.7/en/replication-features-more-columns.html

5.7.44

测试验证

源表中有更多列,以下表定义有效且能正确复制
1
2
source> CREATE TABLE t1 (c1 INT, c2 INT, c3 INT);
replica> CREATE TABLE t1 (c1 INT, c2 INT);

以下表定义将引发错误,因为表中两个版本共有的列在副本上的定义顺序与在源上的定义顺序不同
1
2
source> CREATE TABLE t1 (c1 INT, c2 INT, c3 INT);
replica> CREATE TABLE t1 (c2 INT, c1 INT);

不一定会导致复制中断,但是source和replica上相同列的数据可能会出现不一致

下表定义也会引发错误,因为源表上额外列的定义出现在两个表版本共有的列定义之前
1
2
source> CREATE TABLE t1 (c3 INT, c1 INT, c2 INT);
replica> CREATE TABLE t1 (c1 INT, c2 INT);

不一定会导致复制中断,但是source和replica上相同列的数据可能会出现不一致

以下表定义失败,因为与源版本相比,副本的表版本包含额外的列,并且这两个版本的表对公共列c2使用了不同的数据类型
1
2
source> CREATE TABLE t1 (c1 INT, c2 BIGINT);
replica> CREATE TABLE t1 (c1 INT, c2 INT, c3 INT);

大概率会导致复制中断,

总结

source和replica之间列的多少和顺序,并不 一定会导致复制中断,但是一定会出现数据不一致。source和replica之间的列的数据类型不同,一定会导致复制中断。

8.0.37

测试验证

下表定义也会引发错误,因为源表上额外列的定义出现在两个表版本共有的列定义之前
1
2
source> CREATE TABLE t1 (c3 INT, c1 INT, c2 INT);
replica> CREATE TABLE t1 (c1 INT, c2 INT);

不一定会导致复制中断,但是source和replica上相同列的数据可能会出现不一致

以下表定义失败,因为与源版本相比,副本的表版本包含额外的列,并且这两个版本的表对公共列c2使用了不同的数据类型
1
2
source> CREATE TABLE t1 (c1 INT, c2 BIGINT);
replica> CREATE TABLE t1 (c1 INT, c2 INT, c3 INT);

大概率会导致复制中断,

总结

source和replica之间列的多少和顺序,并不 一定会导致复制中断,但是一定会出现数据不一致。source和replica之间的列的数据类型不同,一定会导致复制中断。