Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Moving or Copying InnoDB Tables

17.6.1.4 将 InnoDB 表移动或复制到不同的服务器或实例

本节描述了将某些或所有 InnoDB 表移到不同服务器或实例的技术。例如,您可能需要将整个 MySQL 实例移到更大的、更快的服务器;您可能需要克隆整个 MySQL 实例到新的副本服务器;您可能需要将单个表复制到另一个实例,以开发和测试应用程序,或者将其复制到数据仓库服务器以生成报告。

在 Windows 上,InnoDB 始终以小写形式存储数据库和表名。要在 Unix 和 Windows 之间以二进制格式移动数据库,或者从 Windows 移动到 Unix,请使用小写名称创建所有数据库和表。实现这一点的一种便捷方式是在创建任何数据库或表之前,在 [mysqld] 部分的 my.cnfmy.ini 文件中添加以下行:

[mysqld]
lower_case_table_names=1
Note

禁止以不同于服务器初始化时的 lower_case_table_names 设置启动服务器。

InnoDB 表移到或复制到其他服务器或实例的技术包括:

导入表

使用 可移植表空间 功能,可以从另一个 MySQL 服务器实例或备份中导入文件每表表空间中的表。请参阅 第 17.6.1.3 节,“导入 InnoDB 表”

MySQL 企业备份

MySQL 企业备份产品允许您在最小化操作中断的情况下备份正在运行的 MySQL 数据库,同时生成数据库的一致快照。在 MySQL 企业备份复制表时,读取和写入可以继续。此外,MySQL 企业备份还可以创建压缩的备份文件,并备份表的子集。与 MySQL 二进制日志结合使用时,您可以执行点时间恢复。MySQL 企业备份是 MySQL 企业订阅的一部分。

有关 MySQL 企业备份的更多详细信息,请参阅 第 32.1 节,“MySQL 企业备份概述”

复制数据文件(冷备份方法)

您可以通过复制所有相关文件来移动 InnoDB 数据库,文件列表见 第 17.18.1 节,“InnoDB 备份” 中的“冷备份”部分。

InnoDB 数据和日志文件在具有相同浮点数格式的所有平台上都是二进制兼容的。如果浮点数格式不同,但您没有在表中使用 FLOATDOUBLE 数据类型,那么过程相同:只是复制相关文件。

当您移动或复制文件每表 .ibd 文件时,数据库目录名必须在源和目标系统上相同。InnoDB 共享表空间中的表定义包括数据库名。表空间文件中的事务 ID 和日志序列号也在不同的数据库之间不同。

要将 .ibd 文件和关联表从一个数据库移到另一个数据库,请使用 RENAME TABLE 语句:

RENAME TABLE db1.tbl_name TO db2.tbl_name;

如果您有一个 clean.ibd 文件备份,可以将其恢复到原始 MySQL 安装中,如下所示:

  1. 表不能自从您复制 .ibd 文件以来被删除或截断,因为这样做会更改表空间中的表 ID。

  2. 发出以下 ALTER TABLE 语句以删除当前 .ibd 文件:

    ALTER TABLE tbl_name DISCARD TABLESPACE;
  3. 将备份 .ibd 文件复制到适当的数据库目录中。

  4. 发出以下 ALTER TABLE 语句,以告诉 InnoDB 使用新的 .ibd 文件 для таблиц:

    ALTER TABLE tbl_name IMPORT TABLESPACE;
    Note

    ALTER TABLE ... IMPORT TABLESPACE 功能不强制在导入的数据上执行外键约束。

在这个上下文中,一个 干净 .ibd 文件备份是指满足以下要求的备份:

  • .ibd 文件中没有未提交的修改事务。

  • .ibd 文件中没有未合并的插入缓冲区条目。

  • 清除已经从 .ibd 文件中删除了所有删除标记的索引记录。

  • mysqld 已经将 .ibd 文件中的所有修改页面从缓冲池刷新到文件中。

您可以使用以下方法创建一个干净的 .ibd 文件备份:

  1. 停止 mysqld 服务器的所有活动,并提交所有事务。

  2. 等待 SHOW ENGINE INNODB STATUS 显示数据库中没有活动事务,并且 InnoDB 的主线程状态为 Waiting for server activity。然后,您可以复制 .ibd 文件。

创建干净的 .ibd 文件副本的另一种方法是使用 MySQL Enterprise Backup 产品:

  1. 使用 MySQL Enterprise Backup 备份 InnoDB 安装。

  2. 在备份上启动第二个 mysqld 服务器,并让其清理备份中的 .ibd 文件。

从逻辑备份还原

您可以使用诸如 mysqldump 之类的实用程序执行逻辑备份,该备份生成一组 SQL 语句,可以执行这些语句以在另一个 SQL 服务器上重新创建原始数据库对象定义和表数据。使用这种方法,不管格式是否不同,或者您的表是否包含浮点数数据。

要提高这种方法的性能,请在导入数据时禁用 autocommit。仅在导入整个表或表的一部分后提交。