Витягнути одну таблицю з дампу MySQL

У вас є дамп на 7 ГБ зі 127 таблицями, але локально вам потрібні лише три з них — users, orders, products. Ось чому звичні трюки з sed/grep ламаються і як витягти саме потрібні таблиці (разом з їхніми зовнішніми ключами) за кілька кліків.

Не кожне завдання потребує всієї бази даних. Коли ви розробляєте функцію локально, вам рідко потрібен повний продакшн-дамп, що заповнює диск і імпортується годину. Вам потрібна жменька таблиць, яких насправді торкається ця функція.

Те саме стосується налагодження однієї таблиці — відтворення проблеми з даними в orders не потребує інших 126 таблиць — або часткової міграції, коли на новий сервіс переїжджають лише кілька таблиць. У всіх цих випадках питання одне й те саме: як витягти лише ці таблиці з величезного дампу, чисто й швидко?

Підхід sed/grep і чому він ламається

Класична відповідь — нарізати файл за допомогою sed між заголовками секцій, які mysqldump записує для кожної таблиці:

# витягти таблицю users з файлу mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

Це виглядає розумно й на маленькому, охайному дампі може навіть спрацювати одного разу. На справжньому файлі в 7 ГБ воно розсипається безліччю тонких способів:

Ви закінчуєте тим, що нагромаджуєте awk на grep на sed, тестуєте на підмножинах і все одно не довіряєте результату. Є кращий спосіб.

Витягайте таблиці за допомогою DumpCleaner

DumpCleaner правильно парсить дамп — він розуміє межі операторів, багаторядкові INSERT, зворотні лапки й коментарі — тож завжди ріже по правильних рядках. Витягання потрібних таблиць займає чотири кроки:

  1. Перетягніть свій дамп .sql усередину. DumpCleaner потоково опрацьовує файл, тож дамп на 7 ГБ відкривається з постійним споживанням пам'яті замість завантаження всього одразу.
  2. Прочитайте автоматично виявлений список таблиць. Кожну таблицю розібрано й перелічено з кількістю рядків і розміром — не потрібно прокручувати мільйони рядків, щоб знайти, що там є.
  3. Виберіть потрібні таблиці. Позначте users, orders і products або введіть regex / шаблон виключення на кшталт *_logs, щоб прибрати цілі групи за один раз.
  4. Увімкніть батьківські таблиці зовнішніх ключів і експортуйте. За бажанням автоматично підтягніть таблиці, на які є посилання, а потім експортуйте чистий, готовий до імпорту файл.

Кілька речей роблять це набагато менш марудним, ніж інструменти оболонки:

Лише потрібні вам таблиці — нічого зайвого

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

Завантажити в App Store

Поширені запитання

Чи можу я витягти кілька таблиць одразу?

Так. Позначте скільки завгодно таблиць — users, orders і products разом — і DumpCleaner запише їх усі в один файл за один прохід.

Чи зберігає він залежності зовнішніх ключів?

За бажанням — так. Увімкніть включення залежностей зовнішніх ключів, і будь-яка батьківська таблиця, на яку посилається ваш вибір, підтягується автоматично, тож витягнуте імпортується без помилок обмежень.

Чи можу я виключати таблиці за шаблоном?

Так. Використовуйте шаблони виключення на кшталт *_logs чи *_sessions або регулярний вираз, щоб прибрати цілі групи таблиць замість зняття позначок по одній.

Чи працює це з PostgreSQL?

Так. DumpCleaner читає дампи MySQL, MariaDB і PostgreSQL (pg_dump) і опрацьовує імена з префіксом схеми на кшталт public.users під час витягання таблиць.

Припиніть боротися з sed і grep

Перетягніть, виберіть таблиці, експортуйте. DumpCleaner витягає саме потрібні вам таблиці — разом з їхніми зовнішніми ключами — з будь-якого дампу.

Завантажити в App Store