Как увеличить лимит на загрузку файлов в phpMyAdmin при импорте больших SQL-дампов?
Решение проблемы: настройка лимитов PHP и MySQL
Проблема в том, что phpMyAdmin использует стандартные настройки PHP для загрузки файлов через HTTP. По умолчанию PHP ограничивает размер загружаемых файлов до 2 МБ (это значение задаётся в upload_max_filesize). Кроме того, есть ещё два параметра, которые нужно учитывать: post_max_size (максимальный размер POST-запроса) и max_execution_time (время выполнения скрипта). Даже если вы увеличите лимит на загрузку, но не увеличите время выполнения, импорт большого файла может прерваться по тайм-ауту.
Вот пошаговая инструкция для увеличения лимита:
Шаг 1. Найдите и отредактируйте php.ini
Файл php.ini — это главный конфигурационный файл PHP. Его расположение зависит от среды:
- OpenServer (локально):
OpenServer/userdata/config/php/phpX.X/php.ini(где X.X — версия PHP, например, 8.0) - XAMPP:
XAMPP/php/php.ini - Хостинг: обычно через панель управления (cPanel, ISPmanager) или файл
.user.iniв корне сайта
Откройте php.ini в текстовом редакторе и найдите следующие строки (или добавьте их, если отсутствуют):
; Максимальный размер загружаемого файла
upload_max_filesize = 128M
; Максимальный размер POST-запроса (должен быть больше upload_max_filesize)
post_max_size = 150M
; Максимальное время выполнения скрипта в секундах (0 — без ограничения)
max_execution_time = 300
; Максимальное время на обработку входных данных (важно для больших файлов)
max_input_time = 300
; Ограничение памяти для скрипта (рекомендуется увеличить)
memory_limit = 256M
Важно: Значение post_max_size должно быть больше, чем upload_max_filesize, иначе PHP будет выдавать ошибку. После изменений перезапустите веб-сервер (Apache/Nginx).
Шаг 2. Настройка phpMyAdmin (дополнительно)
В некоторых случаях phpMyAdmin имеет собственные ограничения. Откройте файл конфигурации config.inc.php (обычно находится в папке phpMyAdmin) и добавьте/измените строки:
// Увеличиваем лимит импорта до 128 МБ
$cfg['UploadDir'] = '';
$cfg['ExecTimeLimit'] = 300; // Время выполнения импорта в секундах
$cfg['MemoryLimit'] = '256M';
Шаг 3. Проверка изменений
Создайте простой PHP-файл для проверки текущих настроек:
<?php
phpinfo();
Запустите его в браузере. Найдите секцию upload_max_filesize и post_max_size — они должны отображать новые значения. Если нет — проверьте, какой файл php.ini на самом деле используется (путь указан в строке Loaded Configuration File).
Шаг 4. Альтернатива: импорт через командную строку
Если настройка PHP не помогает (например, на хостинге нет доступа к php.ini), используйте консольный клиент MySQL:
mysql -u username -p database_name < /path/to/your/dump.sql
После ввода пароля дамп импортируется без ограничений по размеру файла.
Почему это работает?
Параметр upload_max_filesize ограничивает размер файла, который PHP может принять через POST-запрос. phpMyAdmin отправляет SQL-дамп именно таким способом. Увеличив этот лимит, мы разрешаем PHP обрабатывать большие файлы. Параметры max_execution_time и max_input_time нужны, чтобы скрипт не отвалился по тайм-ауту при импорте 50 МБ данных.
Использование расширения для браузера или разбивка дампа на части
Если у вас нет доступа к настройкам PHP (например, на дешёвом хостинге), можно обойти ограничение двумя способами:
Способ 1. Расширение для браузера Big File Upload (для Chrome/Edge)
Установите расширение, которое "обманывает" phpMyAdmin, отправляя файл частями. Работает не всегда, но для 50 МБ может подойти. После установки просто перетащите дамп в окно импорта — расширение само разобьёт файл на фрагменты по 2 МБ.
Способ 2. Разбивка дампа на части через командную строку (Linux/macOS/WSL)
Если у вас есть доступ к терминалу, разбейте дамп на части по 10 МБ:
split -b 10M dump.sql part_
Вы получите файлы part_aa, part_ab, part_ac и т.д. Импортируйте их по очереди через phpMyAdmin. Важно: убедитесь, что дамп начинается с CREATE DATABASE или USE database_name, иначе части будут пытаться создать одни и те же таблицы. Для этого перед разбивкой добавьте в начало дампа:
USE your_database_name;
Или импортируйте только первую часть, а в остальных закомментируйте строки CREATE TABLE (оставьте только INSERT).
Способ 3. Использование phpMyAdmin через SSH-туннель
На некоторых хостингах есть опция "Импорт через SSH". Она позволяет загрузить файл на сервер по FTP/SCP, а затем импортировать его напрямую, минуя веб-интерфейс. Это самый надёжный метод, если есть доступ к файловой системе сервера.
Попробуйте сначала увеличить лимиты через php.ini — это самый правильный путь. Если не получится, используйте разбивку или SSH.