12

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

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

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

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

我知道如何导出为单个文件,而不是多个文件。我怎样才能做到这一点?

4

7 回答 7

19

我刚刚对具有 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
于 2013-05-30T09:33:47.550 回答
6

看看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 > backupfile_table_name.sql

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

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

祝你好运。

于 2012-10-28T20:34:31.300 回答
3

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

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

我使用 HeidiSQL 进行导入。

于 2012-10-29T00:33:10.130 回答
2

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

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

然后导入就像

mysql -u username -ppassword yourotherdb < table_name.sql
于 2012-10-28T20:36:47.280 回答
1

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

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

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

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

于 2014-03-12T11:48:17.917 回答
1

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

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

于 2012-10-28T20:43:59.403 回答
0

如何将大型 MySQL 备份文件拆分为多个文件?

您可以使用 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
...
于 2016-02-21T02:53:23.760 回答