php导入mysql大量数据sql文件,关于mysql:PHP:导入.SQL数据文件时的最大执行时间...

我正在尝试在XAMPP中使用phpMyAdmin导入大型.sql数据文件。 但是,这要花很多时间,而且我不断得到:

Fatal error: Maximum execution time of 300 seconds exceeded in C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php on line 285

该文件长约120万行。

该文件大约有30MB,所以不是很大。 我真的不明白为什么要花这么长时间。

;;;;;;;;;;;;;;;;;;;

; Resource Limits ;

;;;;;;;;;;;;;;;;;;;

; Maximum execution time of each script, in seconds

; http://php.net/max-execution-time

; Note: This directive is hardcoded to 0 for the CLI SAPI

max_execution_time=30000

; Maximum amount of time each script may spend parsing request data. It's a good

; idea to limit this time on productions servers in order to eliminate unexpectedly

; long running scripts.

; Note: This directive is hardcoded to -1 for the CLI SAPI

; Default Value: -1 (Unlimited)

; Development Value: 60 (60 seconds)

; Production Value: 60 (60 seconds)

; http://php.net/max-input-time

max_input_time=60

; Maximum input variable nesting level

; http://php.net/max-input-nesting-level

;max_input_nesting_level = 64

; How many GET/POST/COOKIE input variables may be accepted

; max_input_vars = 1000

; Maximum amount of memory a script may consume (128MB)

; http://php.net/memory-limit

memory_limit=200M

这是xampp中php.ini的配置文件,出于某种原因我仍然得到

Fatal error: Maximum execution time of 300 seconds exceeded in C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php on line 285.

增加时间限制。 检查您的服务器配置。 300已经很高了。 默认值为30。

是的,但是有了300,我只能达到120万中的285行。 虽然该文件约为30MB,但我真的不明白为什么要花这么长时间。

那不是您的sql文件的行号,而是您的php。

默认情况下,从命令行而不是通过Web服务运行的脚本没有最大执行时间限制。 一个处理数百万个数据点的脚本实际上不应在Web服务器的上下文中运行,因此,我强烈建议您重构脚本,使其从命令行运行

您可以在libraries\config.default.php中的phpMyAdmin目录中找到一个配置变量,称为$cfg['ExecTimeLimit'],您可以将其设置为所需的最大执行时间。

config.default.php内有注释,警告不要编辑该文件。这是因为那里的配置可以被另一个文件config.inc.php中设置的配置覆盖。因此,请按照Randell的说明更改超时,但是请在适当的文件中进行更改。

@aldemarcalazans谁在乎评论?

好了,要摆脱这一点,您需要将phpMyadmin变量设置为0,该变量是无限的,或者以秒为单位的任何值都适合您的需求。或者,您始终可以使用CLI(命令行界面)甚至都不会出现此类错误(您可以查看此链接。

现在,关于错误,首先安全起见,请确保已正确设置PHP参数,以便可以上传大文件并从此开始使用最大执行时间。如果没有,请继续并在php.ini文件中设置以下三个参数,

max_execution_time = 3000000(根据您的要求设置)

post_max_size = 4096M

upload_max_filesize = 4096M

完成后,返回找到名为" config.default.php"的phpMyadmin配置文件。在XAMPP上,您可以在" C: xampp phpMyAdmin libraries"文件夹下找到它。打开名为config.default.php的文件并设置:

$cfg['ExecTimeLimit'] = 0;

设置完成后,重新启动MySQL和Apache,然后导入数据库。

请享用... :)

这工作得很好。我只需要更新我的测试服务器。我不会在生产服务器上执行此操作。

您正在尝试通过网络界面导入庞大的数据集。

默认情况下,在Web服务器的上下文中运行的PHP脚本具有最大的执行时间限制,因为您不希望单个错误的PHP脚本占用整个服务器并导致拒绝服务。

因此,您的导入失败。 PHPMyAdmin是一个Web应用程序,正在达到PHP施加的限制。

您可以尝试提高该限制,但是该限制存在是有充分理由的,因此不建议这样做。在Web服务器上运行将花费很长时间才能执行的脚本是一个非常糟糕的主意。

PHPMyAdmin并非真正适用于此类繁重的工作,而是用于日常家政任务和故障排除。

最好的选择是使用适合该工作的工具,例如mysql命令行工具。假设您的文件是SQL转储,那么您可以尝试从命令行运行以下命令:

mysql -u(your user name here) -p(your password here) -h(your sql server name here) (db name here) < /path/to/your/sql/dump.sql

或者,如果您对命令行工具不满意,则SQLYog(对于Windows),Sequel Pro(对于Mac)等工具可能更适合于运行导入作业

这对我有用。

如果在DBIMysqli.class.php文件中超过"最大执行时间300"。在文本编辑器中打开以下文件

C:\xampp\phpMyAdmin\libraries\config.default.php然后

搜索以下代码行:

$cfg[‘ExecTimeLimit’] = 300;

并将值300更改为900。

只需设置$ cfg ['ExecTimeLimit'] = 0;在xampp / phpMyAdmin / libraries / config.default.php中。

最大执行时间(以秒为单位)(0为无限制)。

并根据文件大小在php.ini文件中进行以下更改。

post_max_size = 600M

upload_max_filesize = 500M

max_execution_time = 5000

max_input_time = 5000

memory_limit = 600M

但请确保" post_max_size"和" memory_limit"应大于upload_max_filesize。

**注意-不要忘记重启服务器。

您必须在别名配置(\XAMPP\alias\phpmyadmin.conf)中更改php_admin_value max_execution_time

答案在这里:

WAMPServer phpMyadmin超过360秒的最大执行时间

它是.sql文件还是已压缩(.zip,.gz等)?压缩格式有时需要更多的PHP资源,因此您可以在上传之前尝试对其进行解压缩。

但是,您还可以尝试其他方法。如果您具有命令行访问权限,则只需上传文件并使用命令行客户端mysql导入(在mysql>提示符下依次输入use databasename;和source file.sql)。

否则,您可以使用phpMyAdmin的" UploadDir"功能将文件放在服务器上,并将其显示在phpMyAdmin中,而不必同时从本地计算机上载它。

此链接包含有关使用UploadDir的信息,并且此链接包含更多提示和方法。

1在本地驱动器中进行搜索,然后键入" php.ini"

2-您可能会看到许多名为php.ini的文件,您应该选择适合您的php版本的文件(请参阅localhost)

3打开php.ini文件,在" max_execution_time"上进行搜索,然后使其等于" -1"以使其不受限制

当我尝试了一些要点时,此错误的最佳解决方案。

请按照以下步骤解决此问题:

找到文件[XAMPP安装目录] php php.ini(例如C: xampp php php.ini)

在记事本或任何文本编辑器中打开php.ini

找到包含max_execution_time的行,然后

将值从30增加到更大的数字(例如,设置为:max_execution_time = 90)

然后从XAMPP控制面板重新启动Apache Web服务器

从服务器的php.ini文件仅设置3个参数

A. max_execution_time = 3000000(根据您的要求设置)

B. post_max_size = 4096M

C. upload_max_filesize = 4096M

编辑C:\xampp\phpMyAdmin\libraries\config.default.php页面

$cfg['ExecTimeLimit'] = 0;

完成所有设置后,重新启动服务器,然后再次导入数据库。

完成

永远不要更改原始的config.default.php文件。

更改php.ini中的常规执行时间对phpmyadmin脚本没有影响。

请改用/ phpMyAdmin文件夹中提供的新config.inc.php或config.sample.inc.php。

您可以按照上面的建议在config.inc.php中设置$cfg[‘ExecTimeLimit’] = 0;意味着无限执行。请注意,这不是一个"普通" ini文件。它是一个php脚本,因此您需要在该文件的开头打开。

但最重要的是:根本不要使用此过程! phpmyadmin适用于小型数据库,但不适用于具有数MB或GB的大型数据库。

您在服务器上还有其他工具可以处理导入。

a)如果您有服务器管理员

像Plesk这样的系统,使用那里的数据库导入工具。

b)使用ssh命令进行数据库转储或直接在其中写入数据库

通过SSH的MySQL。下面的命令。

创建数据库转储:

mysqldump DBname --add-drop-table -h DBhostname -u DBusername -pPASSWORD > databasefile.sql

将数据库写入mysql:

mysql -h rdbms -u DBusername -pPASSWORD DBname < databasefile.sql

在尝试了许多失败之后,我设法通过SSH访问服务器,并使用命令行而不是phpMyAdmin导入了80Mb数据库。这是命令:

mysql -u root -p -D mydatabase -o < mydatabase.sql

导入大型数据库要容易得多,如果在Windows上运行xammp,则mysql.exe的路径为C:\xampp\mysql\bin\mysql.exe

您可以增加限制:

ini_set('max_execution_time', 3000);

(请注意,此脚本也可能导致较高的内存使用率,因此您可能还必须增加内存使用率)

其他可能的解决方案:分割您的sql文件,并将其作为部分进行处理。我想这不是一个大的SQL查询,对吗?

更新:正如@Isaac所指出的,这与PHPMyAdmin有关。在这种情况下,在php.ini中设置max_execution_timeout。 (位置取决于您的环境)

由于发布者使用的是phpMyAdmin,所以我不认为打开源代码并找到放置该行的最佳位置是理想的解决方案。

以下内容可能对您有帮助:

ini_set('max_execution_time', 100000);

在您的mysql-max_allowed_packet=100M中,在某些情况下,查询时间过长,sql也会产生错误" MySQL服务器已消失"。

将值更改为所需的值。

由于某种原因,他给了我同样的错误。致命错误:第285行的C: xampp phpMyAdmin libraries dbi DBIMysqli.class.php中超过了300秒的最大执行时间。即使我将其更改为100000

还有两种可能,您的脚本无权更改。2.脚本DBIMysqli.class.php覆盖您的max_execution_time。

在phpadmin中,有一个选项"如果脚本检测到它接近PHP超时限制,则允许中断导入。(这可能是导入大文件的好方法,但是它可能会中断事务。")有什么帮助吗?

尝试关闭它,看看

由于发布者使用的是phpMyAdmin,所以我不认为打开源代码并找到放置该行的最佳位置是理想的解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值