MySQL 8.0发行说明
MySQL 8.0源代码文档10bet官方网站
可以以复制上的存储引擎与源上的存储引擎不相同的方式使用复制。例如,可以将修改复制到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.
存储引擎,这意味着没有记录更改。