10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册 本手册摘录

15.19 InnoDB和MySQL复制

可以以复制上的存储引擎与源上的存储引擎不相同的方式使用复制。例如,可以将修改复制到Innodb.表上的源到myisam.在副本上的表。有关更多信息,请参见,第17.4.4节,“在不同的源和副本存储引擎上使用复制”

有关设置副本的信息,请参见第17.1.2.6节“设置副本”,第17.1.2.5节“选择数据快照方法”。若要在不删除源或现有副本的情况下创建新副本,请使用MySQL企业备份产品。

源上失败的事务不会影响复制。MySQL复制是基于二进制日志的,MySQL在其中写入修改数据的SQL语句。一个失败的事务(例如,因为一个外键冲突,或者因为它被回滚)不会被写到二进制日志中,所以它不会被发送到副本。看到第13.3.1节,“启动事务、提交和回滚语句”

复制和级联。级联操作Innodb.源上的表被复制到副本上只有如果表共享外键关系的表Innodb.在源和副本上。无论您使用的是基于语句的复制还是基于行的复制,都是如此。假设您已经开始了复制,然后在源上创建两个表Innodb.被定义为默认存储引擎,使用以下内容创建表声明:

创建表FC1(I INT主键,J INT);创建表FC2(M INT主键,N INT,Offerse Key Ni(N)参考删除级联上的FC1(I));

如果副本有myisam.定义为默认存储引擎,在副本上创建相同的表,但它们使用了myisam.存储引擎,和外键选择将被忽略。现在我们将一些行插入到源的表中:

源>插入到FC1值(1,1),(2,2);查询OK,2行受影响(0.09秒)记录:2重复:0警告:0源>插入FC2值(1,1),(2,2),(3,1);查询OK,3行受影响(0.19秒)记录:3重复:0警告:0

此时,在源和副本中,表fc1包含2行和表fc2包含3行,如下所示:

source> select * from fc1;+ --- + ------ + |我|J |+ --- + ------ + |1 |1 ||2 |2 | +---+------+ 2 rows in set (0.00 sec) source> SELECT * FROM fc2; +---+------+ | m | n | +---+------+ | 1 | 1 | | 2 | 2 | | 3 | 1 | +---+------+ 3 rows in set (0.00 sec) replica> SELECT * FROM fc1; +---+------+ | i | j | +---+------+ | 1 | 1 | | 2 | 2 | +---+------+ 2 rows in set (0.00 sec) replica> SELECT * FROM fc2; +---+------+ | m | n | +---+------+ | 1 | 1 | | 2 | 2 | | 3 | 1 | +---+------+ 3 rows in set (0.00 sec)

现在假设您执行以下操作删除关于来源的说明:

源>从fc1中删除i = 1;查询OK,1行受影响(0.09秒)

由于级联,表fc2在源上现在只包含一行:

source> SELECT * FROM fc2;+---+---+ | m | n  | +---+---+ | 2 | 2  | +---+---+ 1行集(0.00秒)

但是,级联不会在副本上传播,因为副本上删除为了fc1不删除任何行。fc2。复制品的副本fc2仍然包含最初插入的所有行:

SELECT * FROM fc2;+---+---+ | m | n  | +---+---+ | 1 | 1 | | 3 | 1 | | 2 | 2  | +---+---+ 3行集(0.00秒)

控件在内部处理级联删除,这是造成这种差异的原因Innodb.存储引擎,这意味着没有记录更改。