Молодогвардейцев 454015 Россия, Челябинская область, город Челябинск 89085842764
MindHalls logo

Импорт больших файлов в phpMyAdmin

Доброго времени суток! Причиной возникновения этой заметки послужила ошибка, которую выкидывает phpMyAdmin при попытке импорта дампа базы из большого файла. Дословно она звучит примерно так: «Fatal error: Maximum execution time of 300 seconds exceeded in /opt/lampp/phpmyadmin/vendor/phpmyadmin/sql-parser/src/Lexer.php on line 227». Формулировка может отличаться в деталях. Из сообщения видно, что превышен максимальный временной лимит на исполнения скрипта, по этой причине дамп импортируется не весь и нам очень грустно. Но обо всем по порядку.

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

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

Изменить ограничение на время исполнения скрипта на PHP

Ограничение введено по вполне понятным причинам, чтобы криво написанный скрипт не положил весь сервер. Зависший бедолага будет автоматически убит через 300 секунд, что равно 5 минутам.

Кстати, при запуске скрипта из консоли(командой php script.php), ограничение будет автоматически снято.

Для того, чтобы самостоятельно задать значение можно в самом начале скрипта прописать команду, меняющую локальную конфигурацию. Делается это с помощью функции ini_set(), первым аргументом нужно передать строку-идентификатор настройки, а вторым желаемое значение.

ini_set('MAX_EXECUTION_TIME', 0);

Процесс импорта в phpMyAdmin это такой же скрипт на php, поэтому и его ограничение можно снять, сейчас посмотрим, как это сделать.

Файл настроек phpMyAdmin

Если у вас установлен lampp — Linux, Apache, MySQL, PHP, Perl, то файл конфигураций находится по примерно такому адресу.

/opt/lampp/phpmyadmin/libraries/config.default.php

В самом начале нас встретит ужасающая надпись «NO! DO NOT EDIT», я ее даже скопирую сюда.

Предупреждение

Красиво написано, но мы же не зря его открыли, правда? Ищем строку, которая отвечает за нужную конфигурацию, вот она

/**
 * maximum execution time in seconds (0 for no limit)
 *
 * @global integer $cfg['ExecTimeLimit']
 */
$cfg['ExecTimeLimit'] = 300;

Сейчас стоит 300 секунд, что маловато для дампа даже средних размеров. Поэтому смело меняем значение на 0.

$cfg['ExecTimeLimit'] = 0;

На самом деле, можно послушаться совета и скопировать эту строку в файл config.inc.php, который находит на одну директорию выше, но я не стал. Вместо этого я вернул значение на 300 после успешного импорта.

Заключение

Таким образом можно добиться успешного дампа достаточно больших файлов. Главное, не забывайте возвращать настройки, чтобы избежать неприятных ситуаций. На сегодня у меня все, спасибо за внимание!