将大型MySQL表导出为多个较小的文件

时间:2012-10-28 20:28:00

标签: mysql export

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

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

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

我使用的工具是PhpMyAdmin,HeidiSQL和MySQL Workbench。

我知道如何导出为单个文件,但不是多个文件。我怎么能这样做?

7 个答案:

答案 0 :(得分:16)

我刚刚导入/导出了一个包含50万条记录的(分区)表,只需要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

答案 1 :(得分:5)

查看mysqldump

你的行应该是(来自终端):

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

mysqldump -u user -p db_name > backupfile.sql

从mysql中的backupfile导入到db_name:

mysql -u user -p db_name < backupfile.sql

您有两种方法可以拆分信息:

  1. 将输出文本文件拆分为较小的文件(尽可能多的文件,许多工具,例如split)。
  2. 每次使用选项在db_name之后添加表名,导出一个表,如下所示:

    mysqldump -u user -p db_name table_name > backupfile_table_name.sql

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

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

    祝你好运。

答案 2 :(得分:3)

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

我必须调整我的php.ini设置,加上phpMyAdmin配置'ExecTimeLimit'设置  因为生成转储文件需要一些时间(每行500,000行)。

我使用HeidiSQL进行导入。

答案 3 :(得分:2)

作为单个表的mysqldump方法的一个例子

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

导入就像

一样简单
mysql -u username -ppassword yourotherdb < table_name.sql

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

Adminer 是一款纤薄且高效的数据库管理器工具,至少与PHPMyAdmin一样功能强大,并且只有一个单一文件必须上传到服务器才能使其非常强大易于安装。对于大型表/ DB而言,它比PMA更好。

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

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

答案 6 :(得分:0)

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
...