MySQL 5.7移动或复制InnoDB表

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

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

[mysqld]
lower_case_table_names=1
mysql> show variables like 'lower_case_table%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 1     |
+------------------------+-------+
1 row in set (0.01 sec)

传输表空间
传输表空间特性使用FLUSH TABLES…FOR EXPORT准备好从一个服务器实例复制到另一个服务器实例的InnoDB表。为了使用这个特性,InnoDB表创建时必须将innodb_file_per_table设置为ON,这样每个InnoDB表都有自己的表空间。

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

拷贝数据文件(冷备份方式)
你可以通过复制“冷备份”中列出的所有相关文件来移动InnoDB数据库。

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;

ALTER TABLE…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企业备份产品:
1.使用MySQL Enterprise Backup备份InnoDB安装。
2.在备份机上启动第二个mysqld服务器,并让它清理备份中的.ibd文件。

导出和导入(mysqldump)
您可以使用mysqldump将表转储到一台机器上,然后在另一台机器上导入转储文件。使用此方法,格式是否不同或表是否包含浮点数据都无关紧要。

提高此方法性能的一种方法是在导入数据时关闭自动提交模式,假设表空间有足够的空间容纳导入事务生成的大回滚段。只有在导入整个表或表的一个段后才执行提交操作

发表评论

电子邮件地址不会被公开。