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:
- Wielowierszowe INSERTy. Pojedynczy
INSERT INTO ... VALUESmoże obejmować tysiące wierszy. Narzędzia zorientowane na wiersze, takie jaksedigrep, tną te rekordy na pół i tworzą plik, który się nie sparsuje. - Backticki i znaki specjalne. Wartości kolumn zawierają
--, średniki, backticki, cudzysłowy i znaki nowej linii wewnątrz ciągów. Twój wzorzec dopasowuje tekst wewnątrz danych, który nigdy nie miał być separatorem. - Nazwy tabel jako podciągi. Wyodrębnienie
userchwyta teżuser_roles,user_sessionsipassword_user, bo nazwa pojawia się jako podciąg innych. - Dryf komentarzy i nagłówków. Dokładny tekst komentarza różni się między wersjami MySQL, MariaDB i PostgreSQL, a
pg_dumpw ogóle nie używa tych samych nagłówków — więc to samo polecenie po cichu nic nie zwraca. - Brak świadomości kluczy obcych. Nawet jeśli idealnie wytniesz
orders, jego wiersze odwołują się dousers.sednie ma o tym pojęcia, więc ekstrakt nie zaimportuje się z powodu błędu klucza obcego.
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:
- 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ść. - 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.
- Wybierz tabele, które chcesz. Zaznacz
users,ordersiproductslub wpisz wyrażenie regularne / wzorzec wykluczający, taki jak*_logs, aby jednym ruchem usunąć całe grupy. - 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:
- Wzorce wykluczające takie jak
*_logslub*_sessionsusuwają szum z audytu i sesji bez ręcznego odznaczania dziesiątek tabel. - Filtry regex pozwalają dopasować według prefiksu, sufiksu lub dowolnego wzorca — zachowaj na przykład wszystko pasujące do
shop_*. - Podgląd na żywo pokazuje dokładnie, które tabele znajdą się w wyniku, w miarę jak zmieniasz zaznaczenie.
- Szacowany rozmiar wyniku mówi Ci, jak duży będzie ekstrakt przed eksportem, więc wiesz, że zmieści się lokalnie.
- Zależności kluczy obcych można dołączyć automatycznie, więc wybranie
orderspo cichu dociągausers, a ekstrakt importuje się bez błędów ograniczeń.
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 StoreNajczęś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