Извличане на една таблица от MySQL дъмп

Имате дъмп от 7 GB със 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 GB се разпада по много незабележими начини:

Накрая трупате awk върху grep върху sed, тествате върху подмножества и все още не се доверявате на резултата. Има по-добър начин.

Извличане на таблици с DumpCleaner

DumpCleaner парсва дъмпа правилно — разбира границите на заявките, многоредовите INSERT заявки, обратните апострофи и коментарите — така че винаги реже на правилните редове. Извличането на таблиците, които ви трябват, отнема четири стъпки:

  1. Плъзнете вашия .sql дъмп вътре. DumpCleaner преминава файла поточно, така че дъмп от 7 GB се отваря с постоянна памет, вместо да зарежда цялото нещо.
  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