Avatar ·

Как увеличить лимит на загрузку файлов в phpMyAdmin при импорте больших SQL-дампов?

Всем привет! Я новичок в PHP и MySQL. Разрабатываю сайт на локальном сервере (OpenServer). Сегодня решил перенести базу данных с одного хостинга на другой. Скачал дамп через phpMyAdmin — файл получился около 50 МБ. Но когда я пытаюсь импортировать его через phpMyAdmin на новом хостинге (или локально), появляется ошибка: "Скорее всего, размер загружаемого файла превышает максимально допустимый размер". В интерфейсе импорта написано "Максимальный размер: 2 048 КБ" — это всего 2 МБ! Как мне загрузить дамп размером 50 МБ? Я пробовал разбивать файл на части вручную через текстовый редактор, но это очень муторно и я боюсь нарушить структуру таблиц. Может быть, есть способ увеличить этот лимит? Я использую PHP 8.0, MySQL 5.7, phpMyAdmin последней версии. Вот пример моего дампа (только начало, чтобы было понятно): ```sql -- phpMyAdmin SQL Dump -- version 5.2.0 -- https://www.phpmyadmin.net/ CREATE TABLE `users` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `email` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `users` (`id`, `name`, `email`) VALUES (1, 'Иван', 'ivan@example.com'), (2, 'Мария', 'maria@example.com'); ``` Как правильно настроить PHP и phpMyAdmin, чтобы можно было импортировать файлы размером хотя бы до 100 МБ? Заранее спасибо! <<>>

Решение проблемы: настройка лимитов 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.