PHP: максимальное время выполнения при импорте файла данных.SQL

Я пытаюсь импортировать большой файл данных.sql, используя phpMyAdmin в XAMPP. Однако это занимает много времени, и я продолжаю получать:

Неустранимая ошибка: максимальное время выполнения 300 секунд превышено в C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php в строке 285

И файл составляет около 1,2 миллиона строк.

Файл размером около 30 МБ, поэтому он не такой большой. Я не совсем понимаю, почему это так долго.

;;;;;;;;;;;;;;;;;;;
; 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 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

Это файл конфигурации для php.ini в xampp, по какой-то причине я все еще получаю

Неустранимая ошибка: максимальное время выполнения 300 секунд превышено в C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php в строке 285.

Ответы

Ответ 1

Там есть переменная конфигурации в каталоге phpMyAdmin, которую вы можете найти в libraries\config.default.php называется $cfg['ExecTimeLimit'] которую вы можете установить для любого максимального времени выполнения, которое вам нужно.

Ответ 2

Ну, чтобы избавиться от этого, вам нужно установить переменную phpMyadmin равным 0, которая не ограничена, или какое значение в считанные секунды вам подходит для ваших нужд. Или вы всегда можете использовать CLI (интерфейс командной строки), чтобы даже не получить такие ошибки (для чего вы хотели бы взглянуть на эту ссылку.

Теперь об ошибке здесь, сначала в безопасном месте, убедитесь, что вы правильно настроили параметры PHP, чтобы вы могли загружать большие файлы и можете использовать максимальное время выполнения с этой целью. Если нет, перейдите и установите ниже трех параметров из файла php.ini,

  1. max_execution_time = 3000000 (установите это согласно вашему запросу)
  2. post_max_size = 4096M
  3. upload_max_filesize = 4096M

Как только это произойдет, вернитесь к поиску файла конфигурации phpMyadmin с именем "config.default.php". На XAMPP вы найдете его в папке "C:\xampp\phpMyAdmin\libraries". Откройте файл config.default.php и установите:

$cfg['ExecTimeLimit'] = 0;

После установки перезапустите MySQL и Apache и импортируйте свою базу данных.

Наслаждаться... :)

Ответ 3

Вы пытаетесь импортировать огромный набор данных через веб-интерфейс.

По умолчанию скрипты PHP, выполняемые в контексте веб-сервера, имеют максимальный срок выполнения, потому что вы не хотите, чтобы один скрипт PHP-скрипта связывал весь сервер и вызывал отказ в обслуживании.

По этой причине ваш импорт не работает. PHPMyAdmin - это веб-приложение и накладывает ограничения, налагаемые PHP.

Вы можете попытаться повысить лимит, но этот предел существует по уважительной причине, поэтому он не рекомендуется. Запуск сценария, который займет очень много времени для выполнения на веб-сервере, - очень плохая идея.

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

Это сработало для меня. Если в файле DBIMysqli.class.php превышено максимальное время выполнения 300. Откройте следующий файл в текстовом редакторе C:\xampp\phpMyAdmin\libraries\config.default.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/

Ответ 5

Просто установите $ cfg ['ExecTimeLimit'] = 0; В xampp/phpMyAdmin/library/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.

** Примечание - не забудьте перезагрузить сервер.

Ответ 6

Это файл.sql или сжат (.zip,.gz и т.д.)? Для сжатых форматов иногда требуется больше ресурсов PHP, поэтому вы можете попробовать рассыпать их перед загрузкой.

Однако есть и другие методы, которые вы можете попробовать. Если у вас есть доступ к командной строке, просто загрузите файл и импортируйте его с помощью mysql командной строки (один раз в приглашении mysql>, use databasename; source file.sql use databasename; затем source file.sql).

В противном случае вы можете использовать функцию "UploadDir" phpMyAdmin, чтобы поместить файл на сервер и отобразить его в phpMyAdmin, не загружая его с вашей локальной машины.

Эта ссылка содержит информацию об использовании UploadDir, и у этого есть еще несколько советов и методов.

Ответ 8

После многих неудачных попыток мне удалось получить SSH-доступ к серверу и импортировать мою базу данных 80 МБ с помощью командной строки вместо phpMyAdmin. Вот команда:

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

Гораздо проще импортировать большие базы данных, если вы используете xammp для Windows, путь для mysql.exe - это C:\xampp\mysql\bin\mysql.exe

Ответ 9

  1. Никогда не меняйте оригинальный файл config.default.php.
  2. Изменение общего времени выполнения в php.ini не влияет на сценарии phpmyadmin.
  3. Вместо этого используйте новый config.inc.php или config.sample.inc.php, предоставленный в папке /phpMyAdmin.
  4. Вы можете установить $cfg['ExecTimeLimit] = 0; означает бесконечное выполнение в config.inc.php, как рекомендовано выше. Имейте в виду, что это не "нормальный" INI файл. Это скрипт php, так что вам нужно открыть <?php в начале этого файла.
  5. Но самое главное: не используйте эту процедуру вообще! phpmyadmin подходит для небольших баз данных, но не для больших баз данных с несколькими МБ или ГБ.

У вас есть другие инструменты на сервере для обработки импорта.

а) Если у вас есть система администратора сервера, такая как Plesk, используйте там инструмент для импорта базы данных.

б) использовать команды 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

Ответ 10

Задайте только 3 параметра из файла php.ini вашего сервера

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;

После того, как все настроено, перезагрузите сервер и снова импортируйте базу данных.

Готово

Ответ 11

Лучшее решение для этой ошибки, когда я попробовал некоторые моменты. Чтобы решить эту проблему, выполните следующие действия:

  1. найдите файл [Каталог установки XAMPP]\php\php.ini (например, C:\xampp\php\php.ini)
  2. откройте php.ini в блокноте или любом текстовом редакторе
  3. найдите строку, содержащую max_execution_time и
  4. увеличьте значение с 30 до большего числа (например, set: max_execution_time = 90)
  5. затем перезапустите веб-сервер Apache с панели управления XAMPP

Ответ 12

Вы можете увеличить лимит:

ini_set('max_execution_time', 3000);

(Обратите внимание, что этот скрипт также может привести к высокому использованию памяти, поэтому вам, вероятно, также придется увеличить его)

Другое возможное решение: Разделите свой файл sql и обработайте его как части. Я предполагаю, что это не один большой SQL-запрос, не так ли?

Обновление: Как отметил @Isaac, речь идет о PHPMyAdmin. В этом случае установите max_execution_timeout в php.ini. (Местоположение зависит от вашей среды)

Ответ 13

Следующие могут помочь вам:

ini_set('max_execution_time', 100000);

И в вашем mysql - max_allowed_packet=100M в некоторых случаях, когда запросы слишком длинны, sql также создает и ошибки "сервер MySQL ушел";

Измените значения так, как вам нужно.