暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【ACDU 翻译】MySQL 15.19 InnoDB 和 MySQL 复制

原创 由迪 2022-07-20
335

可以以副本上的存储引擎与源上的存储引擎不同的方式使用复制。例如,您可以 InnoDB将对源上的 MyISAM表的修改复制到副本上的表。有关更多信息,请参阅第 17.4.4 节,“将复制与不同的源和副本存储引擎一起使用”

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

源上失败的事务不影响复制。MySQL 复制基于 MySQL 写入修改数据的 SQL 语句的二进制日志。失败的事务(例如,由于外键违规或回滚)不会写入二进制日志,因此不会发送到副本。请参阅 第 13.3.1 节,“START TRANSACTION、COMMIT 和 ROLLBACK 语句”

复制和级联。 当共享外键关系的表 在源和副本上都使用时,源上的表的 级联操作才会InnoDB在副本上执行。无论您使用的是基于语句的复制还是基于行的复制,都是如此。假设您已经开始复制,然后在源上创建两个表,其中 定义为默认存储引擎,使用以下 语句: InnoDB``InnoDBCREATE TABLE

CREATE TABLE fc1 ( i INT PRIMARY KEY, j INT ); CREATE TABLE fc2 ( m INT PRIMARY KEY, n INT, FOREIGN KEY ni (n) REFERENCES fc1 (i) ON DELETE CASCADE );

如果副本已MyISAM定义为默认存储引擎,则在副本上创建相同的表,但它们使用MyISAM存储引擎,并且 FOREIGN KEY忽略该选项。现在我们在源上的表中插入一些行:

source> INSERT INTO fc1 VALUES (1, 1), (2, 2); Query OK, 2 rows affected (0.09 sec) Records: 2 Duplicates: 0 Warnings: 0 source> INSERT INTO fc2 VALUES (1, 1), (2, 2), (3, 1); Query OK, 3 rows affected (0.19 sec) Records: 3 Duplicates: 0 Warnings: 0

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

source> SELECT * FROM fc1; +---+------+ | i | 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)

现在假设您 DELETE对源执行以下语句:

source> DELETE FROM fc1 WHERE i=1; Query OK, 1 row affected (0.09 sec)

由于级联,fc2源上的表现在仅包含 1 行:

source> SELECT * FROM fc2; +---+---+ | m | n | +---+---+ | 2 | 2 | +---+---+ 1 row in set (0.00 sec)

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

replica> SELECT * FROM fc2; +---+---+ | m | n | +---+---+ | 1 | 1 | | 3 | 1 | | 2 | 2 | +---+---+ 3 rows in set (0.00 sec)

这种差异是由于级联删除是由InnoDB存储引擎在内部处理的,这意味着没有记录任何更改。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论