Постійно виникають три ситуації:
- Підняти схему для стейджингу чи CI — вам потрібна порожня структура таблиць, щоб тести працювали проти справжніх стовпців, індексів і обмежень, але ви абсолютно не хочете відправляти гігабайти продакшн-рядків у одноразове середовище.
- Лише сідові дані — схема вже існує в цільовій базі даних, і вам потрібні лише рядки INSERT, щоб її наповнити, без операторів CREATE, які б конфліктували з наявним.
- Позбутися шуму — дамп роздутий таблицями
logs,sessions,audit_trailчиcacheз десятками мільйонів рядків, які ви ніколи не хочете імпортувати.
Чому 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
Це виглядає добре на маленькому, охайному дампі — а потім ламається на справжньому:
- Багаторядкові INSERT. Один
INSERT INTO … VALUESможе простягатися на тисячі рядків.grepзбігається з першим рядком і залишає решту значень осиротілими, створюючи зламаний файл. - Розширені вставки. mysqldump пакує багато рядків в один величезний оператор. Порядкові фільтри не можуть визначити, де такий оператор закінчується.
- Коментарі й блоки. Умовні блоки
/*! … */,LOCK TABLESі коментарі--чергуються з даними, тож наївний фільтр або залишає сміття, або вирізає щось потрібне для імпорту. - Лише дані ще гірше. Чистий
grep '^INSERT'викидає операториSETіLOCK, від яких залежать рядки, а будь-який INSERT, що не починається точно з нульового стовпця, мовчки зникає.
Ви закінчуєте налагодженням власного фільтра замість того, щоб отримати свою схему.
Лише структура чи лише дані за допомогою DumpCleaner
DumpCleaner розуміє оператори SQL, а не зіставляє рядки, тож надійно розділяє структуру й дані — у файлах будь-якого розміру:
- Перетягніть свій дамп
.sqlу DumpCleaner (MySQL, MariaDB чи PostgreSQL). Він парсить файл потоково, тож багатогігабайтний дамп завантажується з постійним споживанням пам'яті. - Перемкніть типи операторів, які вам потрібні: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Зніміть позначку з INSERT INTO — і ви отримаєте лише структуру; зніміть позначку з CREATE TABLE / CREATE INDEX — і ви отримаєте лише дані.
- Або виберіть пресет — Лише структура чи Лише дані — щоб налаштувати всі перемикачі за один крок, а потім уточнити для окремих таблиць за бажанням.
- Експортуйте. Ви отримаєте компактний файл схеми для стейджингу чи 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