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

时间:2014-04-02 16:33:51

标签: php mysql sql phpmyadmin xampp

我正在尝试使用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秒的最长执行时间。

15 个答案:

答案 0 :(得分:45)

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

答案 1 :(得分:24)

好吧,要摆脱这个,你需要将phpMyadmin变量设置为0,这是无限的,或者你找到适合你需要的秒数。或者你总是可以使用CLI(命令行界面)甚至不会出现这样的错误(你想看看this link

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

中设置三个参数
  1. max_execution_time = 3000000(根据您的要求设置)
  2. 的post_max_size = 4096M
  3. 的upload_max_filesize = 4096M
  4. 完成后再回到找到名为“config.default.php”的phpMyadmin配置文件。在XAMPP上,您可以在“C:\ xampp \ phpMyAdmin \ libraries”文件夹下找到它。打开名为config.default.php的文件并设置:

    $cfg['ExecTimeLimit'] = 0;
    

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

    享受...... :)。

答案 2 :(得分:5)

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

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

答案 3 :(得分:4)

这对我有用。 如果在DBIMysqli.class.php文件中超过了最大执行时间300。在文本编辑器中打开以下文件 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/

答案 4 :(得分:1)

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

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

否则你可以使用phpMyAdmin&#34; UploadDir&#34;功能将文件放在服务器上,并将其显示在phpMyAdmin中,而不必从本地计算机上传。

This link包含有关使用UploadDir的信息,this one有更多提示和方法。

答案 5 :(得分:1)

您必须在别名配置php_admin_value max_execution_time

中更改(\XAMPP\alias\phpmyadmin.conf)

答案在这里: WAMPServer phpMyadmin Maximum execution time of 360 seconds exceeded

答案 6 :(得分:1)

只需设置$ 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。

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

答案 7 :(得分:0)

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

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

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

答案 8 :(得分:0)

  1. 请勿更改原始config.default.php文件。
  2. 更改php.ini中的常规执行时间不会影响phpmyadmin脚本。
  3. 使用新的config.inc.php或/ phpMyAdmin文件夹中提供的config.sample.inc.php。
  4. 您可以按照上面的建议在config.inc.php中设置$cfg[‘ExecTimeLimit’] = 0;意味着无限执行。请注意,这不是一个“普通” ini文件。它是一个php脚本,因此您需要在该文件的开头打开<?php
  5. 但最重要的是:完全不要使用此过程! 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

答案 9 :(得分:0)

仅从服务器的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;

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

完成

答案 10 :(得分:0)

当我尝试了一些要点时,此错误的最佳解决方案。 请按照以下步骤解决此问题:

  1. 找到文件[XAMPP安装目录] \ php \ php.ini(例如C:\ xampp \ php \ php.ini)
  2. 在记事本或任何文本编辑器中打开php.ini
  3. 找到包含max_execution_time和的行
  4. 将值从30增加到更大的数字(例如,设置为:max_execution_time = 90)
  5. 然后从XAMPP控制面板重新启动Apache Web服务器

答案 11 :(得分:0)

1-在您的本地驱动器中进行搜索,然后键入“ php.ini”  2-您可能会看到许多名为php.ini的文件,您应该选择适合您的php版本的文件(请参阅localhost)  3-打开php.ini文件,在“ max_execution_time”上进行搜索,然后使其等于“ -1”以使其不受限制

答案 12 :(得分:0)

如果您使用的是 laragon 并且您的数据库是 phpMyAdmin,则处理此错误的过程是相同的。

打开 laragon 右键单击​​它并打开 php.ini 文件

enter image description here

根据您的需要设置这些值

  • max_execution_time
  • post_max_size
  • upload_max_filesize

打开新文件config.default.php

路径是 C:\laragon\etc\apps\phpMyAdmin\libraries\config.default.php

  • 并设置此 $cfg['ExecTimeLimit'] = 0;
  • 的值

重启 laragon。

我希望它能解决你在 laragon 环境下的问题? #Happy Coding :)

答案 13 :(得分:-2)

您可以增加限制:

ini_set('max_execution_time', 3000);

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

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

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

答案 14 :(得分:-3)

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

ini_set('max_execution_time', 100000);

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

将值更改为您需要的值。