题 PHP:导入.SQL数据文件时的最长执行时间


我试图在XAMPP中使用phpMyAdmin导入一个大的.sql数据文件。然而,这需要花费很多时间而且我会继续:

致命错误:在285行的C:\ xampp \ phpMyAdmin \ libraries \ dbi \ DBIMysqli.class.php中超出了300秒的最大执行时间

该文件大约有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的配置文件,由于某种原因,我仍然得到

致命错误:在第285行的C:\ xampp \ phpMyAdmin \ libraries \ dbi \ DBIMysqli.class.php中超过了300秒的最大执行时间。


27
2018-04-02 16:33


起源


增加时间限制。检查您的服务器配置。 300已经很高了。默认值为30。 - Halcyon
是的,但有300,我只能从120万行中获得285行。虽然文件大约是30MB,但我真的不明白为什么这么长时间。 - EssexPN
这不是你的sql文件的行号,而是你的php。 - mark.sagikazar
从命令行而不是通过Web服务运行的脚本默认情况下没有最大执行时间限制。处理数百万个数据点的脚本不应该真正在Web服务器的上下文中运行,因此我强烈建议您重构脚本以从命令行运行 - GordonM


答案:


您可以在phpMyAdmin目录中找到配置变量 libraries\config.default.php 叫 $cfg['ExecTimeLimit'] 您可以设置所需的最长执行时间。


40
2018-06-02 00:08



感谢randell为我工作 - Nagaraju Kasa
config.default.php中有一条注释,警告不要编辑该文件。这是因为那里的配置可以被另一个文件中设置的配置覆盖:config.inc.php。因此,按照Randell的说明更改超时,但在相应的文件中执行此操作。 - aldemarcalazans
关心评论的@aldemarcalazans? - I am the Most Stupid Person
谢谢......它有效 - Zulkifli Said


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

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

  1. max_execution_time = 3000000(根据您的要求设置)
  2. 的post_max_size = 4096M
  3. 的upload_max_filesize = 4096M

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

$cfg['ExecTimeLimit'] = 0;

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

请享用... :)


18
2017-09-13 04:49





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

默认情况下,在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)等操作可能更适合运行导入作业


5
2017-08-11 10:16





这对我有用。 如果超过最大执行时间300 DBIMysqli.class.php 文件。在文本编辑器中打开以下文件 C:\xampp\phpMyAdmin\libraries\config.default.php 然后 搜索以下代码行:

$cfg[‘ExecTimeLimit’] = 300;

并改变价值 300 至 900

https://surya2in1.wordpress.com/2015/07/28/fatal-error-maximum-execution-time-of-300-seconds-exceeded/


3
2017-07-14 13:42





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

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

否则,您可以使用phpMyAdmin“UploadDir”功能将文件放在服务器上,并将其显示在phpMyAdmin中,而无需从本地计算机上载它。

这个链接 有关于使用UploadDir和 这个 有一些提示和方法。


1
2018-04-03 14:11





你必须改变 php_admin_value max_execution_time 在您的Alias配置中 (\XAMPP\alias\phpmyadmin.conf)

答案在这里: WAMPServer phpMyadmin超出最大执行时间360秒


1
2017-07-02 06:54





在尝试了许多没有成功的事情之后,我设法获得了对服务器的SSH访问,并使用命令行而不是phpMyAdmin导入我的80Mb数据库。这是命令:

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

如果您在Windows上运行xammp,那么导入大型数据库要容易得多 的mysql.exe 是 C:\xampp\mysql\bin\mysql.exe


0
2018-02-07 11:38





你可以增加限制:

ini_set('max_execution_time', 3000);

(请注意,此脚本也会导致高内存使用量,因此您可能还需要增加内存使用率)

其他可能的解决方案:将您的sql文件块化,并将其作为部分处理。我假设,它不是一个大的SQL查询,是吗?

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


-2
2018-04-02 16:37



由于海报使用phpMyAdmin,我不认为打开源代码并找到放置该行的最佳位置是一个理想的解决方案。 - Isaac Bennetch


以下可能对您有所帮助:

ini_set('max_execution_time', 100000);

在你的mysql中 - max_allowed_packet=100M 在某些情况下,查询太长sql也会产生错误“MySQL服务器已经消失”;

将值更改为您需要的任何值。


-3
2018-04-02 16:37



由于某种原因,他给了我同样的错误。致命错误:在第285行的C:\ xampp \ phpMyAdmin \ libraries \ dbi \ DBIMysqli.class.php中超出了300秒的最大执行时间。即使我已将其更改为100000 - EssexPN
还有另外两种可能,你的脚本没有权限更改它,2。脚本DBIMysqli.class.php,覆盖你的max_execution_time。 - Neta Meta
在phpadmin中,有一个选项“允许在脚本检测到它接近PHP超时限制时中断导入。(这可能是导入大文件的好方法,但它可能会破坏事务。)”如果转可能有帮助吗? - EssexPN
尝试将其关闭并查看 - Neta Meta
由于海报使用phpMyAdmin,我不认为打开源代码并找到放置该行的最佳位置是一个理想的解决方案。 - Isaac Bennetch