【问题标题】:Import MySQL dump into a specific tablespace将 MySQL 转储导入特定表空间
【发布时间】:2017-10-22 15:11:28
【问题描述】:

Windows 7 64 位 MySQL 5.7

全部,

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

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

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

我是一名前高级 Oracle DBA(所以我可能对表空间的看法不正确),但在谈到 MySQL 时却是“1 个月大”(所以请不要排除基本/简单的建议)。

请帮忙。

提前致谢。

史蒂夫

【问题讨论】:

    标签: mysql database import


    【解决方案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. 为每个表使用 ALTER TABLE 并让它们使用 E: 上的新通用表空间。

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

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

    【讨论】:

    • 这行得通。如您所料,我没有能力制作转储文件。我已经创建了单独的转储。此外,我的文件大小为 36GB。我使用 UltraEdit 注释掉 drop table 语句,并将 Create table 语句替换为 create table if not exist 语句。 UltraEdit 允许您在文件中搜索和替换,而无需在编辑器中打开它们。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 2021-05-21
    相关资源
    最近更新 更多