【问题标题】:Export a large MySQL table as multiple smaller files将大型 MySQL 表导出为多个较小的文件
【发布时间】:2012-10-18 05:48:00
【问题描述】:

我的本​​地开发服务器上有一个非常大的 MySQL 表:超过 800 万行数据。我使用 LOAD DATA INFILE 成功加载了表。

我现在希望导出此数据并将其导入远程主机。

我尝试将 LOAD DATA LOCAL INFILE 加载到远程主机。但是,大约 15 分钟后,与远程主机的连接失败。我认为唯一的解决方案是将数据导出到多个较小的文件中。

我可以使用的工具是 PhpMyAdmin、HeidiSQL 和 MySQL Workbench。

我知道如何导出为单个文件,而不是多个文件。我该怎么做?

【问题讨论】:

  • 你可以尝试 mysqldump'ing 只需要的表并通过导入重建它。
  • 你能从本地机器连接到mysql机器吗?
  • @Michael - 是的,当然。我一直在使用 HeidiSQL 进行数据库维护。
  • 然后只在本地转储 - 拆分文件然后上传增量。

标签: mysql export


【解决方案1】:

How do I split a large MySQL backup file into multiple files?

你可以使用 mysql_export_explode https://github.com/barinascode/mysql-export-explode

<?php 
#Including the class

include 'mysql_export_explode.php';
$export = new mysql_export_explode;

$export->db = 'dataBaseName'; # -- Set your database name
$export->connect('host','user','password'); # -- Connecting to database
$export->rows = array('Id','firstName','Telephone','Address'); # -- Set which fields you want to export
$export->exportTable('myTableName',15); # -- Table name and in few fractions you want to split the table
?>

At the end of the SQL files are created in the directory where the script is executed in the following format
---------------------------------------
myTableName_0.sql
myTableName_1.sql
myTableName_2.sql
...

【讨论】:

    【解决方案2】:

    如果您不习惯使用 mysqldump 命令行工具,这里有两个 GUI 工具可以帮助您解决这个问题,尽管您必须能够通过 FTP 将它们上传到服务器!

    Adminer 是一款小巧且非常高效的 DB Manager 工具,它至少与 PHPMyAdmin 一样强大,并且只有一个必须上传到服务器的单个文件,这使得它非常容易安装。它比 PMA 更适用于大型表/数据库。

    MySQLDumper 是专门为导出/导入大型表/数据库而开发的工具,因此它对您描述的情况没有问题。唯一的缺点是安装起来有点乏味,因为有更多的文件和文件夹(约 350 个文件在 ~1.5MB 中),但通过 FTP 上传也不应该是问题,它肯定会得到完成的工作:)

    所以我的建议是首先尝试 Adminer,如果那个也失败了,请走 MySQLDumper 路线。

    【讨论】:

      【解决方案3】:

      我刚刚导入/导出了一个包含 5000 万条记录的(分区)表,只需 2 分钟即可将其从相当快的机器导出,并将其导入速度较慢的桌面需要 15 分钟。无需拆分文件。

      mysqldump 是你的朋友,知道你有很多数据最好压缩它

       @host1:~ $ mysqldump -u <username> -p <database> <table> | gzip > output.sql.gz
       @host1:~ $ scp output.sql.gz host2:~/
       @host1:~ $ rm output.sql.gz
       @host1:~ $ ssh host2
       @host2:~ $ gunzip < output.sql.gz | mysql -u <username> -p <database>
       @host2:~ $ rm output.sql.gz
      

      【讨论】:

        【解决方案4】:

        看看mysqldump

        你的台词应该是(从终端):

        从 mysql 中的 db_name 导出到 backupfile.sql:

        mysqldump -u user -p db_name > backupfile.sql
        

        从备份文件导入 mysql 中的 db_name:

        mysql -u user -p db_name < backupfile.sql
        

        为了拆分信息,您有两种选择:

        1. 将输出文本文件拆分为更小的文件(根据需要,使用许多工具来执行此操作,例如 split)。
        2. 使用在 db_name 后添加表名的选项每次导出一个表,如下所示:

          mysqldump -u user -p db_name table_name &gt; backupfile_table_name.sql

        压缩文件(文本文件)非常有效,可以将其最小化到原始大小的 20%-30% 左右。

        应使用scp(安全复制)将文件复制到远程服务器,并且应使用 ssh(通常)进行交互。

        祝你好运。

        【讨论】:

        • "将输出文本文件拆分为更小的文件(根据需要,使用许多工具来执行此操作)。" - 什么工具?这是一个问题:我该怎么做?
        • 看看编辑。添加了 Unix 的“split”作为示例,应该在大多数系统上都可用。
        【解决方案5】:

        作为单个表的mysqldump方法的示例

        mysqldump -u root -ppassword yourdb yourtable > table_name.sql
        

        然后导入就这么简单

        mysql -u username -ppassword yourotherdb < table_name.sql
        

        【讨论】:

        • 我发现这对于大型出口/进口来说特别快。对 OP 的好建议。
        • 是的,这很好,但是我没有对服务器的 SSH 访问权限。它没有回答实际问题。
        • @Billy 如果您有 phpmyadmin 访问权限,您仍然可以在转储文件上运行 phpmyadmin 导入。您可以选择进行部分导入,然后将要跳过的查询数指定为成功发生的次数。
        【解决方案6】:

        我发现 phpMyAdmin 中的高级选项允许我选择要导出的行数以及起点。这使我可以根据需要创建尽可能多的转储文件,以将表放到远程主机上。

        我不得不调整我的 php.ini 设置,以及 phpMyAdmin config 'ExecTimeLimit' 设置 因为生成转储文件需要一些时间(每个 500,000 行)。

        我使用 HeidiSQL 进行导入。

        【讨论】:

          【解决方案7】:

          使用mysqldump 将表转储到文件中。 然后使用tar-z 选项来压缩文件。 将其传输到您的远程服务器(使用ftpsftp 或其他文件传输实用程序)。 然后解压远程服务器上的文件 使用mysql 导入文件。

          没有理由拆分原始文件或导出多个文件。

          【讨论】:

          • @Vyktor 请再向我解释一下你的问题。我可能在这里遗漏了一些信息。我的第一个快速回答是我不希望任何查询超时。 “mysql”命令将在要进行导入的本地机器上处理“xxx.sql”文件(导出的结果)。 “xxx.sql”文件包含正在导入的表的“插入”命令(预计大约有 800 万个这样的命令/语句,即等于手头表的行数)。我看不出这些“插入”命令由于任何超时而失败的任何原因。
          • 这是一个共享主机 - 我无法通过命令行访问 MySQL。
          • 问题是:如何拆分数据......不管你认为我应该还是不应该。显然,对我来说,这是最简单的解决方案,因为我可以通过 HeidiSQL 轻松导入较小的文件
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-06
          • 2017-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-22
          • 2013-02-23
          相关资源
          最近更新 更多