window 7 64 位 MySQL 5.7
全部,
我的服务器有两个驱动器:C: 和 E:。 我想将所有数据库对象(表、索引等)创建/存储在 E 驱动器上,因为它是一个更大的磁盘。 我有一个来自以前的 MySQL 实例的转储文件,我想将其导入到位于 E 上的表空间 (ts1) 中。(我实际上有两个版本的转储文件 - 一个只包含创建表/过程,另一个包含数据包括。) 有没有办法导入带有数据的转储文件,以便所有对象和数据最终都在 E: 上的 ts1 中?
我已经尝试更改 my.ini(cfg) 文件中的数据目录,但是当我尝试重新启动实例/服务时它失败了(Windows 告诉我服务尝试启动然后停止。)
有人可以告诉我将转储文件导入特定表空间的推荐方法吗?这是我自己的个人开发服务器,因此可以承受停机时间,可以取消实例或可能提出的任何其他激进解决方案。
我是一名前高级 Oracle DBA(所以我可能错误地想到了表空间),但在谈到 MySQL 时“只有 1 个月大”(所以请不要排除基本/简单的建议)。
请帮忙。
提前致谢。
史蒂夫
最佳答案
不幸的是,MySQL 还不支持为模式中的所有表定义默认表空间。您只能为每个表显式声明一个表空间。
所以我建议您需要两个转储文件:一个只有数据定义语言(DDL,即 CREATE TABLE 语句),第二个只有数据(INSERT 语句)。您可以使用 mysqldump
程序执行此操作,它具有 --no-data
和 --no-create-info
选项。这些选项分别生成仅包含 DDL 或仅包含 INSERT 语句的转储文件。参见 https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html获取完整文档。
那么你可以遵循这个策略:
运行 DDL 转储文件以创建空表。
Create a tablespace并使用 E: 驱动器上的数据文件定义它。
为您的每个表更改 TABLE,并使它们使用 E: 上的新通用表空间。
运行数据转储文件以导入数据。
也许您不再能够从以前的 MySQL 安装中生成转储文件。您只有当前的转储文件。然后你可能需要弄清楚如何使用文本编辑器将 CREATE TABLE 语句与数据文件分开,如果你给它一个大文件就不会死,或者像 sed
这样的过滤文本工具.
关于mysql - 将 MySQL 转储导入特定表空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875638/