暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL InnoDB磁盘接口之移动或复制InnoDB表

韩哥有话说 2021-04-28
683

InnoDB磁盘接口之移动或复制InnoDB表

本节介绍将某些或所有InnoDB
表移动或复制 到其他服务器或实例的技术。例如,您可以将整个MySQL实例移至更大,速度更快的服务器上。您可以将整个MySQL实例克隆到新的副本服务器上;您可以将单个表复制到另一个实例以开发和测试应用程序,或复制到数据仓库服务器以生成报告。

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

[mysqld]
lower_case_table_names=1

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

导入表格MySQL企业备份复制数据文件(冷备份方法)从逻辑备份还原

导入表格

可以使用可传输表空间功能从另一个MySQL服务器实例或备份中导入每表文件表空间中的 。请参见 “导入InnoDB表”。

MySQL企业备份

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

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

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

InnoDB
只需复制“ InnoDB备份”中 “冷备份”下列出的所有相关文件,即可移动数据库 。

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

移动或复制每表.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
清除已从.ibd
文件中删除所有删除标记的索引记录 。
mysqld已将.ibd
文件的所有修改页从缓冲池刷新 到文件。

您可以.ibd
使用以下方法制作干净的备份文件:

1.停止mysqld服务器上的所有活动并提交所有事务。2.等待直到SHOW ENGINE INNODB STATUS
显示数据库中没有活动的事务,并且主线程状态 InnoDB
Waiting for server activity
。然后,您可以复制该 .ibd
文件。

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

1.使用MySQL企业备份来备份 InnoDB
安装。
2.在备份上 启动第二个mysqld服务器,并让其清理备份中的.ibd
文件。

从逻辑备份还原

您可以使用诸如mysqldump之类的实用程序执行逻辑备份,该实用程序将生成一组SQL语句,可以执行这些语句以重现原始数据库对象定义和表数据,以将其传输到另一个SQL Server。使用此方法,格式是否不同或表是否包含浮点数据都没有关系。

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

最后修改时间:2021-04-28 12:07:57
文章转载自韩哥有话说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论