首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MySQL转储导入特定的表空间

将MySQL转储导入特定的表空间
EN

Stack Overflow用户
提问于 2017-10-22 15:11:28
回答 1查看 536关注 0票数 1

Windows 7 64位MySQL 5.7

全,

我有一个服务器,它有两个驱动器: C:& E:。我想拥有我所有的数据库对象(表、索引等)创建/存储在E驱动器上,因为它是一个较大的磁盘。我有一个来自以前的MySQL实例的转储文件,我想将它导入位于E上的表空间(ts1)中(实际上,我有两个版本的转储文件--一个只有创建表/过程,另一个有包含的数据)。是否有方法用数据导入转储文件,以便所有对象和数据在E:上的ts1中结束?

我试图更改my.ini(cfg)文件中的datadir,但是当我试图重新启动实例/服务时,它失败了(告诉我服务试图启动,然后停止)。

有人能告诉我将转储文件导入特定表空间的推荐方法吗?这是我自己的个人开发服务器,所以可以负担得起停机时间,可以吹走实例或任何其他可能提出的激进解决方案。

我是一名前高级Oracle (所以我可能不正确地考虑表空间),但当涉及到MySQL时,我已经“一个月大了”(所以请不要排除基本/简单的建议)。

请帮帮忙。

提前谢谢。

史蒂夫

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-22 19:49:33

不幸的是,MySQL还不支持为模式中的所有表定义默认的表空间。您只能显式地声明每个表的表空间。

因此,我建议您需要两个转储文件:一个只有数据定义语言(DDL,即CREATE语句),另一个只有数据( INSERT语句)。您可以使用mysqldump程序来完成这一任务,它有--no-data--no-create-info的选项。这些选项生成只包含DDL或只包含INSERT语句的转储文件。有关完整的文档,请参见https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

然后,您可以遵循以下策略:

  1. 运行DDL转储文件以创建空表。
  2. 创建表空间并使用E:驱动器上的数据文件定义它。
  3. 为每个表更改表,并使它们在E:上使用新的通用表空间。
  4. 运行数据转储文件导入数据。

也许您不再能够从以前的MySQL安装中生成转储文件。您只有当前转储文件。然后,您可能需要弄清楚如何使用文本编辑器将CREATE语句从数据文件中分离出来,如果给它一个大文件就不会死,或者使用像sed这样的过滤文本工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46875638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档