Wyodrębnij pojedynczą tabelę ze zrzutu MySQL

Masz zrzut 7 GB ze 127 tabelami, ale lokalnie potrzebujesz tylko trzech z nich — users, orders, products. Wyjaśniamy, dlaczego zwykłe sztuczki z sed/grep zawodzą, i jak wyciągnąć dokładnie te tabele, które chcesz (wraz z ich kluczami obcymi), w kilka kliknięć.

Nie każde zadanie wymaga całej bazy danych. Gdy budujesz funkcję lokalnie, rzadko chcesz pełnego zrzutu produkcyjnego zapełniającego dysk i importującego się przez godzinę. Chcesz garstki tabel, których faktycznie dotyczy dana funkcja.

To samo dotyczy sytuacji, gdy debugujesz pojedynczą tabelę — odtworzenie problemu z danymi w orders nie wymaga pozostałych 126 tabel — lub gdy robisz częściową migrację, w której tylko kilka tabel przenosi się do nowej usługi. We wszystkich tych przypadkach pytanie jest to samo: jak wyciągnąć tylko te tabele z gigantycznego zrzutu, czysto i szybko?

Podejście z sed/grep i dlaczego zawodzi

Klasyczną odpowiedzią jest wycięcie pliku za pomocą sed między nagłówkami sekcji, które mysqldump zapisuje dla każdej tabeli:

# wyciągnij tabelę users z pliku mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

Wygląda to sprytnie i na małym, uporządkowanym zrzucie może nawet raz zadziałać. Na prawdziwym pliku 7 GB rozpada się na wiele subtelnych sposobów:

Kończysz, nakładając awk na grep na sed, testując na podzbiorach i wciąż nie ufając wynikowi. Jest lepszy sposób.

Wyodrębnij tabele za pomocą DumpCleaner

DumpCleaner parsuje zrzut poprawnie — rozumie granice instrukcji, wielowierszowe INSERTy, backticki i komentarze — więc zawsze tnie we właściwych miejscach. Wyodrębnienie potrzebnych tabel zajmuje cztery kroki:

  1. Przeciągnij swój zrzut .sql. DumpCleaner przetwarza plik strumieniowo, więc zrzut 7 GB otwiera się ze stałym zużyciem pamięci, zamiast wczytywać całość.
  2. Przeczytaj automatycznie wykrytą listę tabel. Każda tabela jest wyparsowana i wypisana wraz z liczbą wierszy i rozmiarem — bez przewijania milionów wierszy w poszukiwaniu tego, co tam jest.
  3. Wybierz tabele, które chcesz. Zaznacz users, orders i products lub wpisz wyrażenie regularne / wzorzec wykluczający, taki jak *_logs, aby jednym ruchem usunąć całe grupy.
  4. Dołącz nadrzędne tabele kluczy obcych i eksportuj. Opcjonalnie automatycznie dociągnij wskazywane tabele nadrzędne, a następnie wyeksportuj czysty, importowalny plik.

Kilka rzeczy sprawia, że jest to znacznie mniej uciążliwe niż narzędzia powłoki:

Tylko tabele, których potrzebujesz — nic więcej

DumpCleaner wyodrębnia wybrane tabele ze zrzutów dowolnego rozmiaru — strumieniowo, ze stałym zużyciem pamięci i z rozwiązanymi za Ciebie kluczami obcymi. Natywna aplikacja macOS i iPadOS, jednorazowy zakup.

Pobierz z App Store

Najczęściej zadawane pytania

Czy mogę wyodrębnić wiele tabel naraz?

Tak. Zaznacz dowolnie wiele tabel — users, orders i products razem — a DumpCleaner zapisze je wszystkie do jednego pliku w jednym przebiegu.

Czy zachowuje zależności kluczy obcych?

Opcjonalnie, tak. Włącz dołączanie zależności kluczy obcych, a każda tabela nadrzędna wskazywana przez Twój wybór zostanie dociągnięta automatycznie, więc ekstrakt zaimportuje się bez błędów ograniczeń.

Czy mogę wykluczać tabele według wzorca?

Tak. Użyj wzorców wykluczających, takich jak *_logs lub *_sessions, albo wyrażenia regularnego, aby usunąć całe grupy tabel zamiast odznaczać je pojedynczo.

Czy działa z PostgreSQL?

Tak. DumpCleaner odczytuje zrzuty MySQL, MariaDB i PostgreSQL (pg_dump) oraz obsługuje nazwy kwalifikowane schematem, takie jak public.users, przy wyodrębnianiu tabel.

Przestań walczyć z sed i grep

Przeciągnij, wybierz tabele, eksportuj. DumpCleaner wyciąga dokładnie te tabele, których potrzebujesz — wraz z ich kluczami obcymi — z dowolnego zrzutu.

Pobierz z App Store