【问题标题】:PHP: maximum execution time when importing .SQL data filePHP:导入.SQL数据文件时的最大执行时间
【发布时间】:2014-05-14 02:28:45
【问题描述】:

我正在尝试在 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 秒。

【问题讨论】:

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

标签: php mysql sql phpmyadmin xampp


【解决方案1】:

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

【讨论】:

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

好吧,要摆脱这种情况,您需要将 phpMyadmin 变量设置为 0(无限制)或您认为适合您需要的任何值(以秒为单位)。或者您可以始终使用 CLI(命令行界面)甚至不会出现此类错误(您想查看this link

现在关于这里的错误,首先为了安全起见,请确保您已正确设置 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 并导入您的数据库。

享受... :)

【讨论】:

  • 这非常有效。我只需要更新我的测试服务器。我不会在我的生产服务器上这样做。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    完成

    【讨论】:

      【解决方案5】:

      这对我有用。 如果您在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/

      【讨论】:

        【解决方案6】:

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

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

          打开 laragon 右键打开php.ini文件

          根据您的需要设置这些值

          • 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 :)

          【讨论】:

            【解决方案8】:

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

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

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

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                【解决方案10】:

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

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

                导入大数据库更容易,如果你在windows上运行xammp,mysql.exe的路径是C:\xampp\mysql\bin\mysql.exe

                【讨论】:

                  【解决方案11】:

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

                  【讨论】:

                    【解决方案12】:
                    1. 切勿更改原始 config.default.php 文件。
                    2. 在 php.ini 中更改一般执行时间对 phpmyadmin 脚本没有影响。
                    3. 改用新的 config.inc.php 或 /phpMyAdmin 文件夹中提供的 config.sample.inc.php。
                    4. 您可以设置$cfg[‘ExecTimeLimit’] = 0; 表示在上面推荐的config.inc.php 中无限执行。请注意,这不是一个“正常”的 ini 文件。它是一个 php 脚本,因此您需要在该文件的开头打开 &lt;?php
                    5. 但最重要的是:根本不要使用此过程! phpmyadmin 适用于小型数据库,但不适用于几 MB 或 GB 的大型数据库。

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

                    a) 如果您有服务器管理员 像 Plesk 这样的系统,使用那里的数据库导入工具。

                    b) 使用 ssh 命令进行数据库转储或直接将数据库写入 mysql 通过 ssh。下面的命令。

                    创建数据库转储:

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

                    将数据库写入mysql:

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

                    【讨论】:

                      【解决方案13】:

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

                      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 服务器

                      【讨论】:

                        【解决方案14】:

                        你可以增加限制:

                        ini_set('max_execution_time', 3000);
                        

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

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

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

                        【讨论】:

                        • 由于发帖者使用的是phpMyAdmin,我认为打开源代码并找到放置该行的最佳位置并不是一个理想的解决方案。
                        【解决方案15】:

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

                        ini_set('max_execution_time', 100000);

                        在你的 mysql - max_allowed_packet=100M 在某些情况下查询太长 sql 也会产生错误“MySQL server has gone away”;

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

                        【讨论】:

                        • 出于某种原因,他给了我同样的错误。致命错误:第 285 行的 C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php 中超过 300 秒的最大执行时间。即使我已将其更改为 100000
                        • 还有另外两种可能,你的脚本没有权限改变它,2.脚本 DBIMysqli.class.php,覆盖你的 max_execution_time。
                        • 在 phpadmin 中,有一个选项“允许中断导入,以防脚本检测到它接近 PHP 超时限制。(这可能是导入大文件的好方法,但是它可以破坏交易。)”如果关闭可能有帮助吗?
                        • 试试关掉看看
                        • 由于发帖者使用的是phpMyAdmin,我认为打开源代码并找到放置该行的最佳位置并不是一个理想的解决方案。
                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-10-17
                        • 1970-01-01
                        • 2012-09-25
                        • 1970-01-01
                        • 2011-12-06
                        • 2012-06-28
                        • 2016-08-27
                        相关资源
                        最近更新 更多