Εξαγωγή ενός μόνο πίνακα από MySQL dump

Έχετε ένα dump 7 GB με 127 πίνακες, αλλά τοπικά χρειάζεστε μόνο τρεις από αυτούς — users, orders, products. Δείτε γιατί τα συνηθισμένα κόλπα με sed/grep σπάνε, και πώς να εξάγετε ακριβώς τους πίνακες που θέλετε (μαζί με τα ξένα κλειδιά τους) με λίγα κλικ.

Δεν χρειάζεται κάθε εργασία ολόκληρη τη βάση δεδομένων. Όταν χτίζετε μια λειτουργία τοπικά, σπάνια θέλετε ένα πλήρες dump παραγωγής να γεμίζει τον δίσκο σας και να χρειάζεται μια ώρα για να εισαχθεί. Θέλετε τους λίγους πίνακες που πραγματικά αφορά η λειτουργία.

Το ίδιο ισχύει όταν κάνετε debugging σε έναν μόνο πίνακα — η αναπαραγωγή ενός προβλήματος δεδομένων στο orders δεν απαιτεί τους άλλους 126 πίνακες — ή όταν κάνετε μερική μετεγκατάσταση, όπου μόνο λίγοι πίνακες μετακινούνται σε μια νέα υπηρεσία. Σε όλες αυτές τις περιπτώσεις το ερώτημα είναι το ίδιο: πώς παίρνω μόνο αυτούς τους πίνακες από ένα τεράστιο dump, καθαρά και γρήγορα;

Η προσέγγιση sed/grep και γιατί σπάει

Η κλασική απάντηση είναι να κόψετε το αρχείο με sed ανάμεσα στις κεφαλίδες ενοτήτων που γράφει το mysqldump για κάθε πίνακα:

# απομόνωση του πίνακα users από ένα αρχείο mysqldump
sed -n '/-- Table structure for table `users`/,/-- Table structure for table/p' dump.sql > users.sql

Φαίνεται έξυπνο, και σε ένα μικρό, τακτοποιημένο dump μπορεί ακόμη και να λειτουργήσει μία φορά. Σε ένα πραγματικό αρχείο 7 GB καταρρέει με πολλούς λεπτούς τρόπους:

Καταλήγετε να στοιβάζετε awk πάνω σε grep πάνω σε sed, να δοκιμάζετε σε υποσύνολα, και να μην εμπιστεύεστε ακόμη το αποτέλεσμα. Υπάρχει καλύτερος τρόπος.

Εξαγωγή πινάκων με το DumpCleaner

Το DumpCleaner αναλύει το dump σωστά — κατανοεί τα όρια των εντολών, τα πολυγραμμικά INSERT, τα backticks και τα σχόλια — οπότε πάντα κόβει στις σωστές γραμμές. Η εξαγωγή των πινάκων που χρειάζεστε γίνεται σε τέσσερα βήματα:

  1. Σύρετε το .sql dump σας μέσα. Το DumpCleaner κάνει streaming το αρχείο, οπότε ένα dump 7 GB ανοίγει με σταθερή μνήμη αντί να φορτώνει ολόκληρο.
  2. Διαβάστε την αυτόματα εντοπισμένη λίστα πινάκων. Κάθε πίνακας αναλύεται και παρατίθεται με τον αριθμό γραμμών και το μέγεθός του — χωρίς κύλιση σε εκατομμύρια γραμμές για να βρείτε τι υπάρχει.
  3. Επιλέξτε τους πίνακες που θέλετε. Τσεκάρετε τα users, orders και products, ή πληκτρολογήστε ένα μοτίβο regex / αποκλεισμού όπως *_logs για να αφαιρέσετε ολόκληρες ομάδες με τη μία.
  4. Συμπεριλάβετε τους γονικούς πίνακες ξένων κλειδιών και εξάγετε. Προαιρετικά τραβήξτε αυτόματα τους γονικούς πίνακες που αναφέρονται, και μετά εξάγετε ένα καθαρό, εισαγώγιμο αρχείο.

Μερικά πράγματα κάνουν αυτό πολύ λιγότερο επίπονο από τα εργαλεία του κελύφους:

Μόνο τους πίνακες που χρειάζεστε — τίποτα άλλο

Το DumpCleaner εξάγει συγκεκριμένους πίνακες από dumps οποιουδήποτε μεγέθους — με streaming, με σταθερή μνήμη, και με τα ξένα κλειδιά επιλυμένα για εσάς. Εγγενής εφαρμογή macOS & iPadOS, εφάπαξ αγορά.

Κατεβάστε το από το App Store

Συχνές ερωτήσεις

Μπορώ να εξάγω πολλούς πίνακες ταυτόχρονα;

Ναι. Τσεκάρετε όσους πίνακες θέλετε — users, orders και products μαζί — και το DumpCleaner τους γράφει όλους σε ένα ενιαίο αρχείο σε ένα πέρασμα.

Διατηρεί τις εξαρτήσεις ξένων κλειδιών;

Προαιρετικά, ναι. Ενεργοποιήστε το συμπερίληψη εξαρτήσεων ξένων κλειδιών και κάθε γονικός πίνακας που αναφέρεται από την επιλογή σας τραβιέται αυτόματα, ώστε η εξαγωγή να εισάγεται χωρίς σφάλματα περιορισμού.

Μπορώ να αποκλείσω πίνακες με μοτίβο;

Ναι. Χρησιμοποιήστε μοτίβα αποκλεισμού όπως *_logs ή *_sessions, ή μια κανονική έκφραση, για να αφαιρέσετε ολόκληρες ομάδες πινάκων αντί να τους ξετσεκάρετε έναν προς έναν.

Λειτουργεί με PostgreSQL;

Ναι. Το DumpCleaner διαβάζει dumps MySQL, MariaDB και PostgreSQL (pg_dump), και διαχειρίζεται ονόματα με πρόθεμα σχήματος όπως public.users κατά την εξαγωγή πινάκων.

Σταματήστε να παλεύετε με το sed και το grep

Σύρετε, επιλέξτε τους πίνακές σας, εξάγετε. Το DumpCleaner τραβάει ακριβώς τους πίνακες που χρειάζεστε — μαζί με τα ξένα κλειδιά τους — από οποιοδήποτε dump.

Κατεβάστε το από το App Store