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上,避免在创建新的表的时候指定引擎类型。
如果你已经运行渎职解决方案,需要转换你当前的表为其他的引擎:
- 停止运行复制在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上改变表的存储引擎