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

时间:2017-10-22 15:11:28

标签: mysql database import

Windows 7 64位 MySQL 5.7

所有

我有一台带有两个驱动器的服务器:C:& E :. 我希望将所有数据库对象(表,索引等)创建/存储在E驱动器上,因为它是一个更大的磁盘。 我有一个先前MySQL实例的转储文件,我要将其导入到位于E的表空间(ts1)。(实际上我有两个版本的转储文件 - 一个只有create tables / procedures,另一个有数据包括在内。) 有没有办法用数据导入转储文件,以便所有对象和数据最终都在E上的ts1中?:

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

有人能告诉我将转储文件导入特定表空间的推荐方法吗?这是我自己的个人开发服务器,因此可以承受停机时间,可以吹掉实例或可能提出的任何其他根本解决方案。

我是前高级Oracle DBA(因此我可能认为表空间不正确)但是对于MySQL来说是“1个月大”(所以请不要排除基本/简单的建议)。

请帮忙。

提前致谢。

史蒂夫

1 个答案:

答案 0 :(得分:0)

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

所以我建议你需要两个转储文件:一个只有数据定义语言(DDL,即CREATE TABLE语句),第二个只有数据(INSERT语句)。您可以使用mysqldump计划执行此操作,它包含--no-data--no-create-info的选项。这些选项生成仅包含DDL或仅包含INSERT语句的转储文件。有关完整文档,请参阅https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

然后你可以遵循这个策略:

  1. 运行DDL转储文件以创建空表。

  2. Create a tablespace并在E:驱动器上使用数据文件对其进行定义。

  3. 每个表的ALTER TABLE,并使它们在E:上使用新的通用表空间。

  4. 运行数据转储文件以导入数据。

  5. 也许您不再能够从之前的MySQL安装中创建转储文件。你只有当前的转储文件。然后,你可能必须弄清楚如何使用文本编辑器将CREATE TABLE语句与数据文件分开,如果你给它一个大文件,它将不会消失,或者像sed这样的过滤文本工具。