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

Ess*_*xPN 33 php mysql sql xampp phpmyadmin

我试图在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
Run Code Online (Sandbox Code Playgroud)

这是xampp中php.ini的配置文件,由于某些原因我还是得到了

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

Ran*_*ell 47

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

  • 感谢randell为我工作 (3认同)
  • config.default.php 中有一条注释,警告不要编辑该文件。这是因为那里的配置可以被另一个文件中设置的配置覆盖:config.inc.php。因此,请按照 Randell 的说明更改超时,但要在相应的文件中执行此操作。 (3认同)
  • @TARKUS 你真是个天才。每个人都在谈论文件“config.inc.php”,但没有确切地找到它!谢谢兄弟 (2认同)

Ume*_*til 27

好吧,要摆脱这个,你需要将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;
Run Code Online (Sandbox Code Playgroud)

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

请享用... :)

  • 这非常有效。我只需要更新我的测试服务器。我不会在我的生产服务器上这样做。 (2认同)

小智 12

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;
Run Code Online (Sandbox Code Playgroud)

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

完毕


Gor*_*onM 7

您正尝试通过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
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

$cfg[‘ExecTimeLimit’] = 300;
Run Code Online (Sandbox Code Playgroud)

并将值更改300900.

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


mar*_*zar -2

您可以增加限制:

ini_set('max_execution_time', 3000);
Run Code Online (Sandbox Code Playgroud)

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

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

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