根据MySQL 的复制文档,可以设置从 InnoDB 源表到 MyISAM 目标表的复制。不幸的是,文档几乎没有谈到缺点、数据一致性影响(除了 CASCADE 极端案例)和启用这种复制配置的推荐设置。因此,关于此设置,我想到了一些问题:
- 基于语句的复制是否优于基于行的变体,反之亦然?
- InnoDB 或 MyISAM 端是否需要一些特定的设置,以便数据一致性不会因为“正常”复制活动而自行破坏?
- 主服务器上的 DDL 执行是否以理智的方式在从服务器上处理?
- 我将如何防止
ALTER TABLE blah ENGINE=InnoDB
在主服务器上运行的语句传播到从服务器? - 有没有推荐的方法来设置这种“拆分”设置?我可以想到直接
ALTER TABLE blah ENGINE=MyISAM
上slave,这样可行吗? - 任何其他需要知道的注意事项?
我将回答每个问题如下:
如果您要复制到具有所有 MyISAM 表的从属设备,则基于语句更明智,因为 SQL 语句更易于记录和传送。
如果 Slave 拥有所有 InnoDB,则基于行的更好,因为它具有粒度变化。只要愿意忍受臃肿的二进制日志。
MyISAM 不考虑数据一致性。崩溃安全复制的措施总是有利于 InnoDB。MySQL 5.6 支持在 InnoDB 表中存储日志文件和位置。
是的
像这样运行它:
是的,我之前推荐过这个:我可以有一个 InnoDB master 和 MyISAM slaves with Full-Text 进行搜索吗?
您需要的所有警告都在这篇文章中:使用 MyISAM 读取数据和 InnoDB 写入数据