Експортувати лише схему (структуру) з 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. Експортуйте. Ви отримаєте компактний файл схеми для стейджингу чи 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