文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  移动或复制 InnoDB 表

17.6.1.4 移动或复制 InnoDB 表

本节介绍将部分或全部 InnoDB 表移动或复制到不同服务器或实例的技术。例如,您可能将整个 MySQL 实例移动到更大、更快的服务器;您可能将整个 MySQL 实例克隆到新的副本服务器;您可能将单个表复制到另一个实例以开发和测试应用程序,或复制到数据仓库服务器以生成报告。

在 Windows 上,InnoDB 始终以小写形式在内部存储数据库和表名。要将数据库以二进制格式从 Unix 移动到 Windows 或从 Windows 移动到 Unix,请使用小写名称创建所有数据库和表。一种方便的方法是将以下行添加到您的 my.cnfmy.ini 文件的 [mysqld] 部分,然后再创建任何数据库或表

[mysqld]
lower_case_table_names=1
注意

禁止使用与服务器初始化时使用的设置不同的 lower_case_table_names 设置启动服务器。

移动或复制 InnoDB 表的技术包括

导入表

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

MySQL 企业备份

MySQL 企业备份产品允许您备份运行的 MySQL 数据库,对操作的干扰最小,同时生成数据库的一致快照。当 MySQL 企业备份正在复制表时,读取和写入可以继续。此外,MySQL 企业备份可以创建压缩的备份文件,并备份表的子集。结合 MySQL 二进制日志,您可以执行时间点恢复。MySQL 企业备份包含在 MySQL 企业订阅中。

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

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

您可以通过简单地复制 第 17.18.1 节,“InnoDB 备份” 中“冷备份”下列出的所有相关文件来移动 InnoDB 数据库。

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

移动或复制每个表一个文件 .ibd 文件时,数据库目录名称必须在源系统和目标系统上相同。存储在 InnoDB 共享表空间中的表定义包含数据库名称。存储在表空间文件中的事务 ID 和日志序列号也因数据库而异。

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

RENAME TABLE db1.tbl_name TO db2.tbl_name;

如果您有一个 干净.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;
    注意

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

在本例中,干净 .ibd 文件备份是指满足以下要求的备份

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

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

  • Purge 已从 .ibd 文件中删除所有已标记为删除的索引记录。

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

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

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

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

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

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

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

从逻辑备份恢复

您可以使用类似 mysqldump 的实用程序执行逻辑备份,该备份将生成一组 SQL 语句,这些语句可以执行以复制原始数据库对象定义和表数据,以便将数据传输到另一个 SQL 服务器。使用此方法,格式是否不同或表是否包含浮点数无关紧要。

为了提高此方法的性能,在导入数据时禁用 autocommit。仅在导入整个表或表的一部分后执行提交。