网络知识 娱乐 MYSQL存储引擎InnoDB(十四):移动或复制 InnoDB 表

MYSQL存储引擎InnoDB(十四):移动或复制 InnoDB 表

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

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

[mysqld]nlower_case_table_names=1


导入表

存储在每表文件表空间中的表可以从另一个 MySQL 服务器实例或使用传输表空间功能的备份导入。


MySQL 企业备份

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


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

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

当您移动或复制 file-per-table.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;


在以下情况中,“干净” .ibd 文件备份是满足以下要求的备份:

  • .ibd文件中的事务没有未提交的修改 。
  • .ibd文件中没有未合并的插入缓冲区条目。
  • Purge 已从 .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。仅在导入整个表或表的段后执行提交。