将复制与不同的主存储和从存储引擎一起使用
对于复制过程而言,主服务器上的源表和从服务器上的复制表是否使用不同的引擎类型无关紧要。实际上,default_storage_engine
系统变量不会被复制。
这在复制过程中提供了许多好处,因为您可以针对不同的复制方案利用不同的引擎类型。例如,在典型的横向扩展方案中(请参见“使用复制进行横向扩展”),您想InnoDB
在主服务器上使用表来利用事务功能,但MyISAM
要在从服务器上使用事务由于仅读取数据,因此不需要支持。在数据记录环境中使用复制时,您可能需要Archive
在从属服务器上使用存储引擎。
在主服务器和从服务器上配置不同的引擎取决于您如何设置初始复制过程:
如果使用mysqldump在主数据库上创建数据库快照,则可以编辑转储文件文本以更改每个表上使用的引擎类型。
mysqldump的另一种选择是在使用转储在从站上构建数据之前,禁用您不想在从站上使用的引擎类型。例如,您可以
--skip-federated
在从属服务器上添加该选项以禁用FEDERATED
引擎。如果要创建的表不存在特定的引擎,则MySQL将使用默认的引擎类型,通常为MyISAM
。(这要求NO_ENGINE_SUBSTITUTION
不启用SQL模式。)如果要以这种方式禁用其他引擎,则可能需要考虑构建一个特殊的二进制文件,以在仅支持所需引擎的从站上使用。- 如果您使用原始数据文件(二进制备份)来设置从站,则将无法更改初始表格式。而是
ALTER TABLE
在从属服务器启动后使用来更改表类型。 - 对于当前主表上没有表的新主/从复制设置,请避免在创建新表时指定引擎类型。
如果您已经在运行复制解决方案,并且想要将现有表转换为另一种引擎类型,请按照下列步骤操作:
停止从属服务器运行复制更新:
mysql>
STOP SLAVE ;这将使您无需中断即可更改发动机类型。
- 对每个要更改的表执行一个。
ALTER TABLE ... ENGINE='engine_type'
再次启动从属复制过程:
mysql>
START SLAVE ;
尽管default_storage_engine
未复制变量,但是请注意,包含引擎规范的CREATE TABLE
和ALTER TABLE
语句将正确复制到从属服务器。例如,如果您有一个CSV表并执行:
mysql>ALTER TABLE csvtableEngine ='MyISAM';
上面的语句将被复制到从服务器,并且从服务器上的引擎类型将转换为MyISAM
,即使您之前已将从服务器上的表类型更改为CSV以外的其他引擎。如果要保留主服务器和从服务器上的引擎差异,则default_storage_engine
在创建新表时应小心使用主服务器上的变量。例如,代替:
mysql>CREATE TABLE tablea (columna int)Engine =MyISAM;
使用以下格式:
mysql>SET default_storage_engine=MyISAM; mysql>CREATE TABLE tablea (columna int);
复制后,该default_storage_engine
变量将被忽略,并且该CREATE TABLE
语句将使用从站的默认引擎在从站上执行。