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

Bil*_*lly 9 mysql export

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

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

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

我可以使用的工具是PhpMyAdmin,HeidiSQL和MySQL Workbench.

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

Ric*_*lli 18

我刚刚导入/导出了一个包含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
Run Code Online (Sandbox Code Playgroud)


Reu*_*ani 5

看看mysqldump

您的行应该是(从终端):

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

mysqldump -u user -p db_name > backupfile.sql
Run Code Online (Sandbox Code Playgroud)

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

mysql -u user -p db_name < backupfile.sql
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

祝好运。

  • “将输出文本文件拆分为较小的文件(根据您的需要,许多工具可以做到这一点)。” - 什么工具?这是一个问题:我该怎么做? (2认同)