将更大的SQL文件导入MySQL


70

我有一个400MB的大型sql备份文件。我正在尝试使用WAMP-> import将该文件导入到MySQL数据库中,但是由于许多原因(例如上载文件大小太大等),导入未成功。因此,我继续进行一些工作,并对WAMP下的PHP和MySQL配置进行了一些更改。所做的更改是

Under WAMP->MySQL->my.ini

    max_allowed_packet = 800M
    read_buffer_size = 2014K

 Under WAMP->PHP->PHP.ini

    max_input_time = 20000
    memory_limit = 128M

我的问题是,这是使用WAMP-> import导入这么大的sql文件的正确方法吗?如果是这样,我是否对配置文件进行了正确的更改?上述变量允许的最大值是多少?


2
您将必须在命令行中将其导入
Ibu

对于大文件,请始终使用terminal / cmd ..切勿使用UI。
Krishnadas PC

Answers:


148

您可以通过以下命令行方式导入大文件:

mysql -h yourhostname -u username -p databasename < yoursqlfile.sql

2
@lbu谢谢。但是我从未在笔记本电脑上使用过mysql命令行。我总是使用MySQL工作台。有没有办法从工作台启动mysql命令行?
Anil 2013年

13
看起来像是开始学习它的好借口,您不需要成为专家就可以使用它,您可以在工作台上进行的所有工作都可以在命令行上正常工作
Ibu

感谢您的回复。而且我知道我不需要成为专家即可使用它。早些时候,我使用腻子连接到服务器,并使用命令连接到mysql shell mysql -h hostname -u username -D databasename -p。现在,我正在尝试连接到我自己的笔记本电脑,但无法。否则我很好。再次感谢。
艾尼尔

对于大于4 GB的大型数据库,需要花费大量时间。
维平·辛格'18

这样可能会导致错误。最好的方法是使用mysql> source(请参阅其他答案)
德语Khokhlov

38

由于您声明(在对他人答案的澄清注释中)您正在使用MySQL Workbench,因此可以尝试在此处使用“ sql脚本”选项。这样可以避免使用命令行(尽管我同意另一个答案,那就是爬上那匹马并学习骑马是件好事)。

  1. 在MySQL Workbench中,转到“文件”菜单,然后选择“打开脚本”。这可能会花费很长时间,甚至可能会导致应用程序崩溃,因为它并没有打开与您描述的内容一样大的内容。

  2. 更好的方法是使用命令行。确保在计算机上安装了MySQL客户端。这意味着实际的MySQL(而不是Workbench GUI或PhpMyAdmin或类似的东西)。这是描述命令行工具的链接。下载并安装完该文件后,请在计算机上打开一个终端窗口,您可以通过两种选择将数据从文件系统(例如备份文件)中提取到目标数据库中。一种是使用“源”命令,另一种是使用<重定向运算符。

选项1:从备份文件所在的目录中:

$mysql -u username -p -h hostname databasename < backupfile.sql

选项2:从备份文件所在的目录中:

$mysql -u username -p -h hostname
[enter your password]
> use databasename;
> source backupfile.sql

显然,这两个选项都要求您具有SQL备份文件。


9
当“常规”命令行方法不起作用时,“源”方法对我有用。它还具有实时显示执行活动的好处。
詹森·斯威特

2
源方法对我来说至少可以显示查询的进度。但是要花很多时间。有什么方法可以减少上传时间。
维平·辛格

32

在mysql命令窗口中使用它:

mysql> use db_name;
mysql> source backup-file.sql;

2
我更喜欢此解决方案,因为它显示了运行脚本的输出。
Jenn 2015年

您可以使用source命令或\执行SQL脚本文件。命令: mysql> source file_name mysql> \. file_name Reference
Jorj

source为50GB的文件能顺利执行?
wwwwan

@wwwwan是的,我刚刚成功获取了2.6 Gb .sql文件。只需要一点时间。您可能需要增加允许的数据包大小,请参见此答案
glaux

7

您可以使用以下命令从任何SQL查询浏览器中执行import命令:

source C:\path\to\file\dump.sql

在查询窗口中运行上面的代码...并等待一段时间:)

这或多或少等于前面提到的命令行版本。主要区别在于它是从MySQL内部执行的。对于使用非标准编码的用户,这也比使用命令行版本更安全,因为编码失败的风险较小。


1
对于任何好奇的人,请参考:dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html
迈克尔·

6

我真的很喜欢BigDump做到这一点。这是一个非常简单的PHP文件,您可以编辑该文件,然后通过SSH或FTP将其与大文件一起发送。运行并等待!配置字符编码非常容易,默认情况下为UTF-8。



3

如果您在本地执行此操作,则必须执行3件事:

php.iniphp.cfg您的php安装中

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

或设置其他值。重新启动Apache

要么

使用php big dump工具是我见过的最好的工具。它的自由和开源

http://www.ozerov.de/bigdump/


如果数据库为10G怎么办?您是否应该将upload_max_filesize更改为10G?这不是一个好方法
bksi

@bksi,如果您有10 GB的文件,则使用bigdump,我已经通过17 GB的数据库文件进行了测试
Shiv Singh,

有许多不使用其他程序即可轻松导入的方法。
bksi

2

发生了类似的问题,但在Windows中。我试图弄清楚如何在Windows中打开大型MySql sql文件,这些是我必须采取的步骤:

  • 转到下载网站(http://dev.mysql.com/downloads/)。
  • 下载MySQL Community Server并安装(选择开发人员或完全安装,这样它将安装客户端和服务器工具)。
  • 从开始菜单中打开MySql命令行客户端。
  • 输入安装时使用的密码。
  • 在提示符mysql>中,输入:

    CREATE DATABASE database_name;

    USE database_name;

    来源myfile.sql

那应该导入您的大文件。



1

在phpMyAdmin的项目1.16上,他们说:

1.16我无法上传大型转储文件(内存,HTTP或超时问题)。


从2.7.0版开始,导入引擎已被重写,因此不会出现这些问题。如果可能,请将您的phpMyAdmin升级到最新版本,以利用新的导入功能。

要检查的第一件事(或要求您的主机提供商检查)是配置文件中的upload_max_filesizememory_limitpost_max_size的值php.ini。所有这三个设置都限制了PHP可以提交和处理的最大数据大小。一位网友也说,post_max_sizememory_limit需要大于upload_max_filesize。如果您的上传太大或您的托管服务提供商不愿意更改设置,则有几种解决方法:

看着那(这 $cfg['UploadDir']功能。这样一来,您就可以通过scp,ftp或您喜欢的文件传输方法将文件上传到服务器。然后,PhpMyAdmin可以从临时目录中导入文件。本文档的配置中提供了更多信息。

使用实用程序(例如BigDump在上载之前,)拆分文件。我们无法支持此应用程序或任何第三方应用程序,但知道用户已经成功使用它。

如果您具有shell(命令行)访问权限,请使用MySQL直接导入文件。您可以通过在MySQL内部发出“ source”命令来做到这一点:

source filename.sql;

嗯...虽然这在技术上是可行的,但远非理想。
伊恩·布里恩德利

1

这个问题有几个月了,但对于其他寻找的人来说,

导入大文件的更简单方法是在文件夹c:/wamp/apps/phpmyadmin3.5.2中创建子目录“上载”,然后在同一目录中的config.inc.php文件中编辑此行以包含该文件夹名称$ cfg ['UploadDir'] ='上传';

然后将传入的.sql文件放在文件夹/ upload中。

从phpmyadmin控制台内部进行操作,转到新数据库并导入。现在,您将看到一个附加选项,可以从该文件夹上传文件。选择正确的文件并耐心等待。有用。

如果仍然出现超时错误,请尝试添加$ cfg ['ExecTimeLimit'] = 0;。到相同的config.inc.php文件。

我很难导入用户名为root且密码与我的新服务器上的root密码不同的.sql文件。在导出.sql文件之前,我只是摘下了密码,导入工作顺利进行。


1

如果您在Windows上使用source命令,请记住使用f:/myfolder/mysubfolder/file.sql而不是f:\myfolder\mysubfolder\file.sql


普通的Windows反斜杠在Windows XAMPP上没有问题。您的建议有证据吗?
自动扶梯

1

我相信最简单的方法是使用MYSQL命令行上传文件。

使用终端上的命令访问MySQL命令行并运行

    mysql --host=hostname -uuser -ppassword
    source filename.sql 

或直接从终端

   mysql --host=hostname -uuser -ppassword < filename.sql

在提示时

我发现此链接如何在MYSQL中上传大型sql转储文件(内存,HTTP或超时问题)。它概述了上传大型SQL时的操作方法。当我遇到一个客户端196mb sql dump时,它对我有所帮助。PHPMySql无法解决的问题。


-4

我的妮

max_allowed_packet = 800M
read_buffer_size = 2014K

PHP.ini

max_input_time = 20000
memory_limit = 128M
post_max_size=128M

2
由于仅是代码,因此该帖子被自动标记为低质量。您介意添加一些文本来解释为什么它可以解决问题吗?
gung-恢复莫妮卡2014年

增加限制不是解决方案。将mysql命令用于大型sql导入。
ioleo 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.