【问题标题】:How can move InnoDB table from one pc to another pc?如何将 InnoDB 表从一台电脑移动到另一台电脑?
【发布时间】:2012-12-03 14:14:00
【问题描述】:


我有一个“管理员”表,我想将它与所有数据一起从一个位置移动到另一个位置。如果我使用 MyISAM 引擎,那么我会在数据文件夹中为 'admin' 表获得 3 个文件 'admin.frm'、'admin.MYD' 和 'admin.MYI',我可以将这些文件复制并粘贴到另一个位置并可以运行桌子。但是如果我使用 InnoDB 引擎,那么我在数据文件夹中只会得到“admin.frm”,并且当将该文件复制到另一个位置时,该表将无法运行。

请告诉我如何将 InnoDB 表从一个位置移动到另一个位置?

-谢谢。

编辑:(我也需要传输数据和结构(作为整个表格)。我想要它像 MyISAM 表格文件一样简单复制粘贴。有可能吗?和怎么样?)

【问题讨论】:

    标签: mysql innodb


    【解决方案1】:

    如果您只需要传输数据,使用内置工具可能会更简单,因此...

    使用mysqldump来获取你的表,一个很简单的例子:

    mysqldump -u USERNAME -p DATABASE admin > admin.sql
    

    然后在另一台计算机上:

    mysql -u USERNAME -p DATABASE < admin.sql
    

    【讨论】:

    • 我也需要传输数据和结构(作为整个表)。我希望它像 MyISAM 表文件一样简单复制粘贴。怎么可能?
    • mysqldump 默认应该包含创建信息,它会有一个 CREATE TABLE 语句。你不应该复制 MyISAM 文件,除非你在两台机器上都有相同的 my.cnf 并且在相同的主要版本上。
    • 是 'mysqldump' 在这种情况下唯一的解决方案吗?还有其他解决方案吗?
    • mysqldump 是典型的规范解决方案。 dba.stackexchange.com/questions/174/… 有很多其他可能的解决方案,但没有一个是微不足道或常用的。
    • 我明白了,请您详细解释一下解决方案吗?我会在我的数据库当前所在的电脑上的 mysql shell 上写“mysqldump -u USERNAME -p DATABASE admin > admin.sql”吗?那么会发生什么?请你一步一步告诉我好吗?
    【解决方案2】:

    为什么不使用mysqldump 将所有数据转储到一个文件中,然后您可以在另一台机器上运行该文件?

    【讨论】:

      【解决方案3】:

      在 5.6 版本中使用表空间方法移动 Innodb:

      1) 在目标服务器/数据库上创建与源服务器相同的空表。

      2) 丢弃目标服务器上的表空间。

      Alter Table table_name discard tablespace.
      

      3) 在源服务器上执行“flush tables with read lock”后,将.frm 和.ibd 复制到目标服务器。

      4) 在目标服务器上导入表空间:

      ALTER TABLE table_name IMPORT TABLESPACE;
      

      【讨论】: