Экспортировать только схему (структуру) из SQL-дампа

У вас на диске полный дамп, но нужна только структура — CREATE TABLE, индексы, внешние ключи — без таблиц логов на 89 миллионов строк. Или наоборот: только данные, без CREATE-инструкций. Разбираем, почему обычные флаги дампа не помогают готовому файлу, и как отделить структуру от данных в один клик.

Постоянно возникают три ситуации:

Почему mysqldump --no-data недостаточно

Классический совет — mysqldump --no-data (только структура) или mysqldump --no-create-info (только данные). Оба — это флаги экспорта: они меняют то, что содержит новый дамп из работающей базы данных. Они ничего не дают для дампа, который у вас уже лежит на диске в виде файла .sql.

На практике файл часто приходит от кого-то другого, или из задачи резервного копирования, или с сервера, к которому у вас больше нет живого доступа. Вы не можете заново запустить mysqldump против базы, которая недостижима — учётные данные утеряны, сервер выведен из эксплуатации, или файл — это попросту всё, что вам передали. В этот момент флаги бесполезны, и вам остаётся редактировать сам файл.

Ручной способ

Очевидный ход — вырезать строки с помощью grep или sed. Чтобы оставить структуру и убрать данные:

# оставить всё, кроме INSERT-строк
grep -v '^INSERT INTO' dump.sql > schema.sql

# или оставить только INSERT-строки для файла только с данными
grep '^INSERT INTO' dump.sql > data.sql

Выглядит нормально на маленьком аккуратном дампе — и ломается на настоящем:

В итоге вы отлаживаете собственный фильтр вместо того, чтобы получить свою схему.

Только структура или только данные с DumpCleaner

DumpCleaner понимает SQL-инструкции, а не сопоставляет строки, поэтому надёжно отделяет структуру от данных — в файлах любого размера:

  1. Перетащите ваш дамп .sql в DumpCleaner (MySQL, MariaDB или PostgreSQL). Он парсит файл потоком, так что многогигабайтный дамп загружается с постоянным расходом памяти.
  2. Переключите типы инструкций, которые вам нужны: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Снимите INSERT INTO — получите только структуру; снимите CREATE TABLE / CREATE INDEX — получите только данные.
  3. Или выберите пресет — Только структура или Только данные — чтобы задать все переключатели за один шаг, а затем при желании доработать по таблицам.
  4. Экспортируйте. Вы получаете компактный файл схемы для staging или CI, либо чистый дамп только с данными для наполнения.

Поскольку фильтр учитывает инструкции, многострочный расширенный INSERT сохраняется или отбрасывается целиком — никогда не разрезается посередине.

Настоящая сила в том, что фильтрация работает по типу инструкции и по таблице, и эти два измерения комбинируются. Вы можете сохранить структуру каждой таблицы, но включить данные INSERT только для трёх реально нужных таблиц — оставив таблицу logs на 89 миллионов строк пустой оболочкой. Такое не выразить никаким флагом --no-data.

Отделите структуру от данных за секунды

DumpCleaner фильтрует готовый дамп по типу инструкции и по таблице — только структура, только данные или любое сочетание — потоково, с постоянным расходом памяти. Нативное приложение для macOS и iPadOS, разовая покупка.

Загрузить в App Store

Часто задаваемые вопросы

Можно ли экспортировать данные без схемы?

Да. Отключите CREATE TABLE и CREATE INDEX (или выберите пресет «Только данные») и оставьте INSERT INTO. DumpCleaner экспортирует только строки, готовые к загрузке в уже существующую схему.

Сохраняет ли экспорт только структуры индексы и внешние ключи?

Да. Только структура сохраняет CREATE TABLE, CREATE INDEX, ALTER TABLE и определения внешних ключей — всё, что задаёт базу данных. Удаляются только строки данных INSERT.

Можно ли смешивать — структура для всех таблиц, данные для некоторых?

Да. Фильтрация идёт по типу инструкции и по таблице, и обе комбинируются. Сохраните структуру каждой таблицы, но включите данные INSERT только для тех немногих таблиц, что реально нужны.

Работает ли это с PostgreSQL?

Да. DumpCleaner читает дампы MySQL, MariaDB и PostgreSQL и определяет формат автоматически, так что экспорт только структуры и только данных работает одинаково и для файлов pg_dump.

Схема без данных — или данные без схемы

Перетащите, переключите типы инструкций, экспортируйте. DumpCleaner делит любой дамп ровно на ту часть, что вам нужна.

Загрузить в App Store