文档首页
MySQL 8.4 参考手册
相关文档 下载此手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用不同源和副本存储引擎的复制

19.4.4 使用不同源和副本存储引擎的复制

对于复制过程而言,源上的原始表和副本上的复制表是否使用不同的存储引擎类型无关紧要。实际上,default_storage_engine 系统变量不会复制。

这在复制过程中提供了一些好处,您可以利用不同的引擎类型来应对不同的复制场景。例如,在典型的扩展场景(参见 第 19.4.5 节,“使用复制进行扩展”)中,您希望在源上使用 InnoDB 表来利用事务功能,但在副本上使用 MyISAM,因为数据只读,所以不需要事务支持。在使用复制进行数据日志记录的环境中,您可能希望在副本上使用 Archive 存储引擎。

在源和副本上配置不同的引擎取决于您如何设置初始复制过程

  • 如果您使用 mysqldump 在源上创建数据库快照,您可以编辑转储文件文本以更改每个表上使用的引擎类型。

    对于 mysqldump 的另一种选择是在使用转储在副本上构建数据之前,禁用您不想在副本上使用的引擎类型。例如,您可以在副本上添加 --skip-federated 选项来禁用 FEDERATED 引擎。如果要创建的表不存在特定引擎,MySQL 会使用默认引擎类型,通常是 InnoDB。(这要求 NO_ENGINE_SUBSTITUTION SQL 模式未启用。)如果您想以这种方式禁用其他引擎,您可能需要考虑构建一个特殊二进制文件,该二进制文件只支持您想要的引擎。

  • 如果您使用原始数据文件(二进制备份)来设置副本,则无法更改初始表格式。相反,请使用 ALTER TABLE 在副本启动后更改表类型。

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

如果您已经运行了复制解决方案,并且想要将现有表转换为其他引擎类型,请按照以下步骤操作

  1. 停止副本运行复制更新

    mysql> STOP REPLICA;

    这使得能够在不中断的情况下更改引擎类型。

  2. 对要更改的每个表执行 ALTER TABLE ... ENGINE='engine_type'

  3. 重新启动复制过程

    mysql> START REPLICA;

尽管 default_storage_engine 变量不会被复制,但请注意,包含引擎规范的 CREATE TABLEALTER TABLE 语句会被正确地复制到副本。例如,对于 CSV 表,如果执行以下语句:

mysql> ALTER TABLE csvtable ENGINE='MyISAM';

该语句会被复制,副本上的表引擎类型将被转换为 InnoDB,即使您之前已将副本上的表类型更改为除 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 语句将在副本上使用副本的默认引擎执行。