Извлечь одну таблицу из дампа 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, или задайте регулярное выражение / шаблон исключения вроде *_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