17.3.2 Using Replication with Different Master and Slave Storage Engines

17.3.2 Using Replication with Different Master and Slave Storage Engines 使用不同额存储引擎进行复制

复制过程中, 无论是源表在master上和复制表在slave上使用不同的引擎,

事实上, default_storage_engine and storage_engine没有被复制。

这个提供了大量的好处在复制过程中,你可以利用不同的引擎类型用于不同的复制方案。

例如,在一个典型的规模情况,你需要使用InnoDB 表在master上利用交易功能,

但是使用MyISAM 在slave上 ,不需要事务支持 因为数据是只读的。

当使用复制在数据记录的环境中, 你需要使用Archive storage engine

配置不同的存储引擎在master和slave依赖你如何设置初始复制过程。

如果你使用mysqldump在master上创建数据快照,你可以手动编辑来改变每个表的存储引擎。

mysqldump 禁用存储类型,你不需要使用在slave上在你开始dump 来创建数据。

比如, 你可以增加 –skip-federated option在你的slave上来关闭 FEDERATED engine.

如果一个指定的存储引擎不存在表被创建,MySQL 使用默认的存储引擎类型,通常是MyISAM。

(这个需要NO_ENGINE_SUBSTITUTION SQL mode is not enabled.) 如果你需要关闭额外的存储引擎用这种方式,

你可能需要考虑建立一个特别的binary 用于slave 只支持你想要的存储引擎。

如果你使用raw 数据文件(一个2进制备份)来创建slave,你不需要改变出师表格式,使用ALTER TABLE to change

改变表的类型在你的slave启动之后。

对于新的master/slave 复制设置,当前没有表在master上,避免在创建新的表的时候指定引擎类型。

如果你已经运行渎职解决方案,需要转换你当前的表为其他的引擎:

  1. 停止运行复制在slave上:

mysql> STOP SLAVE;

这样你可以改变存储引擎在没有打扰的情况下

2.执行 ALTER TABLE … ENGINE=’engine_type’ 对于每个表

3.启动复制进程

mysql> START SLAVE;

尽管default_storage_engine 变量没有被复制, 小心 CREATE TABLE 和ALTER TABLE 语句

包括引擎制定的会被复制到slave:

mysql> ALTER TABLE csvtable Engine=’MyISAM’;

上面的语句会被复制到slave,存储类型在slave会被转换成MyISAM。

即使你之前已经在slave上改变表的存储引擎

原文地址:https://www.cnblogs.com/hzcya1995/p/13351308.html