mysql - 将 MySQL 转储导入特定表空间

标签 mysql database import

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获取完整文档。

那么你可以遵循这个策略:

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

  2. Create a tablespace并使用 E: 驱动器上的数据文件定义它。

  3. 为您的每个表更改 TABLE,并使它们使用 E: 上的新通用表空间。

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

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

关于mysql - 将 MySQL 转储导入特定表空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875638/

相关文章:

mysql - 计算不同列值出现次数的更有效方法?

php - 如何使用 PHP 从 MYSQL 检索值到单选按钮?

MySQL 3 向 1..n 表关系

java - GridLayout 错误

grails - Groovy中包括Liferay .jars以进行Portlet开发

python - MySQLdb 模块是否支持准备好的语句?

php - Mysql添加并将它们添加为新列

SQL:多值属性

android - 使用mysql数据库在远程服务器上托管Wcf服务并在Android中使用它

R代码执行错误