Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:导入.SQL数据文件时的最大执行时间_Php_Mysql_Sql_Phpmyadmin_Xampp - Fatal编程技术网

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

PHP:导入.SQL数据文件时的最大执行时间,php,mysql,sql,phpmyadmin,xampp,Php,Mysql,Sql,Phpmyadmin,Xampp,我正在尝试在XAMPP中使用phpMyAdmin导入一个大的.sql数据文件。然而,这需要花费很多时间,我不断得到: 致命错误:第285行的C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php中超过了300秒的最大执行时间 这个文件大约有120万行长 这个文件大约有30MB大,所以没有那么大。我真不明白为什么要花这么长时间 ;;;;;;;;;;;;;;;;;;; ; Resource Limits ; ;;;;;;;;;;;;;;;;;;;

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


您可以增加限制:

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

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


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

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

ini\u集('max\u execution\u time',100000)

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


将值更改为所需值。

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

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

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


提供了有关使用UploadDir的信息,并提供了更多提示和方法。

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

您必须在别名配置
(\XAMPP\Alias\phpmyadmin.conf)中更改
php\u admin\u max\u execution\u time

答案如下:
您正试图通过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
mysql-u(此处为您的用户名)-p(此处为您的密码)-h(此处为您的sql server名称)(此处为db名称)

或者,如果您不习惯使用命令行工具,那么像SQLYog(适用于Windows)、Sequel Pro(适用于Mac)等可能更适合于运行导入作业。好了,要解决这个问题,您需要将phpMyadmin变量设置为0(不限值),或者设置为适合您需要的秒值。或者,您也可以始终使用CLI(命令行界面)来避免出现此类错误(您希望了解这些错误)

关于这里的错误,首先,为了安全起见,请确保正确设置了PHP参数,以便可以上载大文件,并可以使用最长的执行时间。如果没有,请继续从PHP.ini文件中设置以下三个参数

  • 最大执行时间=3000000(根据您的要求进行设置)
  • 立柱最大尺寸=4096M
  • 上载\u最大\u文件大小=4096M
  • 完成后,返回到查找名为“config.default.php”的phpMyadmin配置文件。在XAMPP上,您将在“C:\XAMPP\phpMyadmin\libraries”文件夹下找到它。打开名为
    config.default.php
    的文件并设置:

    $cfg['ExecTimeLimit'] = 0;
    
    设置好后,重新启动MySQL和Apache并导入数据库


    享受…:)

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

    mysql -u root -p -D mydatabase -o < mydatabase.sql
    
    mysql-u root-p-D mydatabase-o
    导入大型数据库要容易得多,如果您在windows上运行xammp,mysql.exe的路径是
    C:\xampp\mysql\bin\mysql.exe

    ,这对我很有效。 如果在
    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”应该大于上传的最大文件大小

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

  • 永不成龙
    mysqldump DBname --add-drop-table -h DBhostname -u DBusername -pPASSWORD > databasefile.sql
    
    mysql -h rdbms -u DBusername -pPASSWORD DBname < databasefile.sql
    
    $cfg['ExecTimeLimit'] = 0;