Перейти к основному содержимому

phpMyAdmin — импорт, экспорт, настройка и FAQ

Разработчику Инженеру

Четвёртая глава раздела phpMyAdmin — про обмен данными между серверами, долговременные настройки интерфейса и типичные сбои из официального FAQ. Предполагается, что вы уже умеете выполнять SQL и работать со структурой БД из третьей статьи и знаете, как подключить phpMyAdmin из второй.

Дамп (dump) — файл с SQL-командами или табличными данными, из которого можно восстановить базу или перенести её на другой сервер. phpMyAdmin умеет импортировать такие файлы через браузер и экспортировать их обратно; для очень больших объёмов часто удобнее консольный клиент mysql или mysqldump — те же операции, что и в разделе MySQL.


Импорт данных

Импорт — загрузка внешнего файла в сервер MySQL/MariaDB: создание таблиц, вставка строк или выполнение произвольного SQL. Вкладка Импорт доступна на уровне сервера, базы или отдельной таблицы — контекст задаёт, куда по умолчанию попадут команды без явного USE database.

Поддерживаемые форматы

ФорматРасширение / видКогда выбирать
SQL.sqlПолный или частичный дамп структуры и данных — основной сценарий миграции
CSV.csvТабличные данные без DDL; удобно из Excel/LibreOffice после экспорта
XML.xmlСтруктурированный обмен; нужен libxml в PHP
OpenDocument.odsТаблицы из LibreOffice / Excel (через ODS)

Дополнительно phpMyAdmin принимает сжатые архивы ZIP, GZip, BZip2, если в PHP включены расширения zip, zlib (и bz2 для BZip2). Сжатие уменьшает время загрузки по сети, но не снимает лимиты PHP на разбор файла в памяти.

Лимиты загрузки в PHP

Браузер отправляет файл методом POST; размер и время обработки ограничивают директивы php.ini (см. также настройку веб-сервера для PHP):

ДирективаСмыслПрактическое правило
upload_max_filesizeМаксимальный размер одного загружаемого файлаПоднимайте по мере роста дампов
post_max_sizeЛимит всего тела POST-запросаДолжен быть строго больше upload_max_filesize
max_execution_timeСекунды на выполнение скриптаБольшой импорт может упираться в 30–60 с по умолчанию
memory_limitПамять процесса PHPКрупные XML/ODS требуют запаса

Типичный фрагмент php.ini для локальной разработки (значения подстраивайте под размер дампа):

upload_max_filesize = 128M
post_max_size = 130M
max_execution_time = 600
memory_limit = 256M

После правки перезапустите PHP-FPM или Apache, иначе новые лимиты не применятся.

Обход лимита браузера

Когда файл не проходит через форму загрузки, в официальном FAQ перечислены обходы:

  1. $cfg['UploadDir'] — каталог на диске сервера, куда вы кладёте дамп по FTP/SCP; в мастере импорта выбираете файл с сервера, а не с ПК.
  2. $cfg['TempDir'] — каталог временных файлов импорта; обязателен при ограничении open_basedir в PHP.
  3. Разбиение дампа — сторонние утилиты (например BigDump) режут один .sql на части; используйте только из доверенных источников.
  4. Импорт из shell — надёжный путь для гигабайтных дампов:
mysql -u root -p shop < /path/to/dump.sql

В интерактивном клиенте MySQL то же самое через SOURCE:

USE shop;
SOURCE /path/to/dump.sql;

С версии 2.7+ движок импорта phpMyAdmin переработан: на актуальных релизах 5.2 большие файлы обрабатываются стабильнее, но лимиты PHP и права на каталоги всё равно нужно настраивать явно.

Пример фрагмента config.inc.php

$cfg['UploadDir'] = '/var/lib/phpmyadmin/upload';
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

Каталоги должны существовать и быть доступны пользователю веб-сервера (www-data, apache и т.д.). При open_basedir оба пути должны попадать в разрешённый список — иначе импорт завершится ошибкой (см. раздел FAQ ниже).

Импорт текста в таблицу

Отдельный режим — загрузка текстового файла в уже существующую таблицу (столбцы сопоставляются в мастере). Временные файлы попадают в upload_tmp_dir из php.ini (часто /tmp на Linux). На shared-хостинге с жёстким open_basedir проверьте, что этот каталог разрешён и не переполнен.


Экспорт и резервные копии

Экспорт — обратная операция: phpMyAdmin читает метаданные и данные MySQL и формирует файл для скачивания. Вкладка Экспорт есть у сервера, базы и таблицы.

Режимы SQL-экспорта

РежимРезультатКогда достаточно
БыстрыйSQL-дамп всей выбранной области с настройками по умолчаниюЛокальный бэкап перед экспериментом
ПользовательскийВыбор таблиц, только структура, структура+данные, отдельные опцииМиграция части схемы, перенос без данных

Полезные галочки в пользовательском SQL-экспорте:

  • DROP TABLE — перед CREATE добавить DROP TABLE IF EXISTS (осторожно при восстановлении поверх живой базы);
  • IF NOT EXISTS — не падать, если объект уже создан на целевом сервере;
  • раздельно структура и данные — удобно перенести схему на staging, а данные залить позже.

Другие форматы вывода — CSV, XML, JSON, PDF, OpenDocument, LaTeX и др. Для автоматизации и CI чаще используют SQL или CSV; PDF — скорее "снимок" для отчёта, не для восстановления.

Эквивалент в консоли

То, что phpMyAdmin делает в режиме "быстрый экспорт" одной базы, в терминале близко к:

mysqldump -u root -p --databases shop > shop_backup.sql

Только структура без строк:

mysqldump -u root -p --no-data shop > shop_schema.sql

Дамп SQL остаётся основным способом миграции между MySQL/MariaDB и восстановления после ошибки. Перед DROP DATABASE или массовым DELETE из третьей статьи имеет смысл сделать экспорт здесь или через mysqldump.


Управление пользователями MySQL

phpMyAdmin не хранит своих пользователей — вкладка Учётные записи пользователей (User accounts) показывает и меняет записи в таблицах привилегий MySQL (mysql.user и связанные). Изменения применяются сразу после сохранения.

ДействиеЧто задаётся
СоздатьИмя, хост (localhost, %, конкретный IP), пароль
РедактироватьПароль, глобальные и объектные привилегии
УдалитьУдаление учётной записи с выбранного хоста
ПривилегииУровни: глобальные, база, таблица, столбец, процедура

Интерфейс рисует привилегии флажками; за кулисами выполняются те же GRANT / REVOKE, что и в SQL. Пример эквивалента вручную:

CREATE USER 'app'@'localhost' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app'@'localhost';
FLUSH PRIVILEGES;

Для повседневной разработки заводите отдельного пользователя с минимальными правами на одну базу, а не работайте из панели под root — это пересекается с рекомендациями информационной безопасности.

Потеря пароля root

Восстановление пароля root делается на уровне MySQL (официальная процедура сброса прав с остановкой сервера), а не через "сброс пароля phpMyAdmin". На shared-хостинге пароль сбрасывает провайдер.

Группы пользователей и настраиваемые меню (вкладка User groups) требуют настроенного configuration storage (pmadb) — см. следующий раздел.


pmadb — закладки, история, tracking

pmadb (phpMyAdmin configuration storage) — отдельная база MySQL с служебными таблицами. Без неё phpMyAdmin работает, но не сохраняет между сессиями закладки SQL, историю, связи таблиц, настройки UI и журнал tracking.

ФункцияТаблица (префикс pma__)
Закладки SQLbookmark
История запросовhistory
Связи таблиц (PDF-диаграммы, подсказки JOIN)relation
Настройки интерфейса пользователяuserconfig
Отслеживание изменений схемы/данныхtracking

Создание таблиц — скрипт sql/create_tables.sql из дистрибутива phpMyAdmin; затем в config.inc.php указывают имена таблиц:

$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
// … остальные таблицы по списку из create_tables.sql

Пользователь MySQL, под которым входите в phpMyAdmin, должен иметь INSERT/UPDATE/DELETE на эти служебные таблицы (или отдельная учётка controluser в конфиге). На локальном Open Server pmadb часто уже поднят; на продакшене его настраивают осознанно — лишняя база с метаданными тоже требует бэкапа.


Трансформации и MIME-типы

Для столбцов типа BLOB или бинарных данных в pmadb можно задать MIME-тип (например image/jpeg) и трансформацию — тогда при просмотре строки phpMyAdmin показывает миниатюру или ссылку на скачивание вместо hex-дампа.

  • для inline-отображения JPEG нужно расширение GD2 в PHP;
  • параметры хранятся в метаданных pmadb (column_info и связанные таблицы);
  • без pmadb трансформации недоступны.

Это удобно для полей "аватар", "скан документа", но не заменяет нормальное хранение файлов в объектном хранилище — для веб-приложений чаще выносят бинарники в S3/диск, а в БД держат URL (см. работу с БД из PHP).


Безопасность установки

phpMyAdmin не усиливает безопасность MySQL сам по себе — он лишь вызывает те привилегии, что есть у вошедшего пользователя. Рекомендации из документации Securing your phpMyAdmin installation:

МераЗачем
HTTPSЗащита cookie сессии и пароля в транзите — см. HTTP и HTTPS
Сложный blowfish_secret в config.inc.phpШифрование cookie-режима аутентификации
AllowNoPassword = falseЗапрет входа с пустым паролем MySQL
Ограничение по IP / VPN / basic auth перед каталогомНе публиковать админку БД в открытый интернет
Отдельный пользователь БД с минимальными правамиПовседневная работа без SUPER, FILE, SHUTDOWN
Удалить или закрыть setup после установкиСкрипт первоначальной настройки не должен быть доступен снаружи
Актуальные версии phpMyAdmin и PHPЗакрытие известных CVE

На shared-хостинге (FAQ ISPs) избегайте входа под root из панели провайдера — используйте выданную учётку с правами только на вашу базу. Открытая phpMyAdmin без защиты — частая цель при тестировании на проникновение.


FAQ — типичные ситуации

Пустая страница или "кракозябры"

Симптомы: белый экран после входа, неверная кодировка вместо кириллицы.

  • отключить сжатие вывода: $cfg['OBGzip'] = false, в PHP zlib.output_compression = Off (FAQ 1.1);
  • проверить mbstring и кодировку соединения MySQL (utf8mb4);
  • сверить версии Apache/nginx, PHP и MySQL/MariaDB с требованиями.

Apache падает при работе с phpMyAdmin

Часто устаревший модуль или конфликт PHP. Обновите стек; на IIS с устаревшим ISAPI перейдите на cookie-аутентификацию (FAQ 1.5).

Ошибка 404 после сохранения строки

Типично за reverse proxy — неверный $cfg['PmaAbsoluteUri']. Задайте полный URL установки, например https://db.example.com/phpmyadmin/, иначе редирект после POST уходит на несуществующий путь.

open_basedir при импорте

PHP запрещает писать во временные каталоги вне белого списка. Настройте $cfg['TempDir'] (и при необходимости UploadDir) на каталог внутри open_basedir (FAQ 1.11).

Не сжимается экспорт gzip

Нужно расширение zlib в PHP (function_exists('gzencode') должно быть true). Без zlib экспорт останется несжатым .sql.

Internet Explorer и SSL

Для старых IE + Apache иногда добавляли SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown (FAQ 1.10). Для современных браузеров актуальность низкая; оставьте в конфиге только если реально поддерживаете legacy-клиентов.

Версии СУБД

  • MySQL 5.5+, MariaDB 5.5+ — поддерживаются текущим phpMyAdmin 5.2.
  • Более старые серверы — старые релизы phpMyAdmin с официальной страницы загрузок.

phpMyAdmin и PostgreSQL

Не поддерживается. Для PostgreSQL используйте phpPgAdmin, pgAdmin, DBeaver или psql — тот же класс задач, другой протокол и диалект SQL.


Настройки интерфейса пользователя

Через Настройки (иконка шестерёнки или клавиша s) меняют:

  • язык интерфейса и тему оформления;
  • число строк на странице при просмотре таблицы;
  • поведение SQL-редактора и консоли (Enter vs Ctrl+Enter).

Часть настроек сохраняется в pmadb (pma__userconfig), часть — в cookie браузера. Глобальные значения по умолчанию для всех пользователей задают в config.inc.php (разделы Browse mode, Export and import, SQL query box, Console в официальном Configuration).


Официальная документация в Open Server

Если phpMyAdmin установлен как в Open Server, локально доступны HTML-разделы (путь может отличаться в вашей сборке):

Энциклопедия даёт сжатый маршрут на русском; точные имена и значения директив $cfg[...] сверяйте с полным текстом Configuration — там же описаны все таблицы pmadb и режимы аутентификации из статьи 2.


См. также