Εξαγωγή μόνο του σχήματος (δομής) από SQL dump

Έχετε ένα πλήρες dump στον δίσκο, αλλά θέλετε μόνο τη δομή — CREATE TABLE, indexes, ξένα κλειδιά — χωρίς τους πίνακες logs με τις 89 εκατομμύρια γραμμές. Ή το αντίθετο: μόνο τα δεδομένα, χωρίς εντολές CREATE. Δείτε γιατί οι συνηθισμένες σημαίες dump δεν βοηθούν ένα υπάρχον αρχείο, και πώς να διαχωρίσετε δομή από δεδομένα με ένα κλικ.

Τρεις καταστάσεις εμφανίζονται ξανά και ξανά:

Γιατί το mysqldump --no-data δεν αρκεί

Η κλασική συμβουλή είναι mysqldump --no-data (μόνο δομή) ή mysqldump --no-create-info (μόνο δεδομένα). Και τα δύο είναι σημαίες εξαγωγής: αλλάζουν το τι περιέχει ένα νέο dump από μια βάση δεδομένων που τρέχει. Δεν κάνουν τίποτα για ένα dump που έχετε ήδη στον δίσκο ως αρχείο .sql.

Στην πράξη το αρχείο συχνά φτάνει από κάποιον άλλον, ή από μια εργασία backup, ή από έναν server στον οποίο δεν έχετε πλέον ζωντανή πρόσβαση. Δεν μπορείτε να ξανατρέξετε το mysqldump σε μια βάση δεδομένων που δεν είναι προσβάσιμη — τα διαπιστευτήρια χάθηκαν, ο server αποσύρθηκε, ή το αρχείο είναι απλώς το μόνο που σας δόθηκε. Σε αυτό το σημείο οι σημαίες είναι άχρηστες, και σας μένει να επεξεργαστείτε το ίδιο το αρχείο.

Ο χειροκίνητος τρόπος

Η προφανής κίνηση είναι να αφαιρέσετε γραμμές με grep ή sed. Για να κρατήσετε τη δομή και να αφαιρέσετε τα δεδομένα:

# κράτησε τα πάντα εκτός από τις γραμμές INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# ή κράτησε μόνο τις γραμμές INSERT για ένα αρχείο μόνο δεδομένων
grep '^INSERT INTO' dump.sql > data.sql

Αυτό φαίνεται εντάξει σε ένα μικρό, τακτοποιημένο dump — και μετά σπάει σε ένα πραγματικό:

Καταλήγετε να κάνετε debugging στο ίδιο σας το φίλτρο αντί να παίρνετε το σχήμα σας.

Μόνο δομή ή μόνο δεδομένα με το DumpCleaner

Το DumpCleaner κατανοεί τις εντολές SQL αντί να ταιριάζει γραμμές, οπότε διαχωρίζει τη δομή από τα δεδομένα αξιόπιστα — σε αρχεία οποιουδήποτε μεγέθους:

  1. Σύρετε το .sql dump σας μέσα στο DumpCleaner (MySQL, MariaDB ή PostgreSQL). Αναλύει το αρχείο με streaming, οπότε ένα dump πολλών gigabyte φορτώνεται με σταθερή μνήμη.
  2. Εναλλάξτε τους τύπους εντολών που θέλετε: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. Ξετσεκάρετε το INSERT INTO και παίρνετε μόνο τη δομή· ξετσεκάρετε τα CREATE TABLE / CREATE INDEX και παίρνετε μόνο τα δεδομένα.
  3. Ή επιλέξτε μια προεπιλογή — Μόνο δομή ή Μόνο δεδομένα — για να ρυθμίσετε κάθε εναλλαγή με ένα βήμα, και μετά προσαρμόστε ανά πίνακα αν θέλετε.
  4. Εξαγωγή. Παίρνετε ένα λιτό αρχείο σχήματος για staging ή CI, ή ένα καθαρό dump μόνο δεδομένων για seeding.

Επειδή το φίλτρο έχει επίγνωση των εντολών, ένα πολυγραμμικό extended INSERT κρατιέται ή αφαιρείται ως σύνολο — ποτέ δεν κόβεται στη μέση.

Η πραγματική δύναμη είναι ότι το φιλτράρισμα λειτουργεί ανά τύπο εντολής και ανά πίνακα, και τα δύο συνδυάζονται. Μπορείτε να κρατήσετε τη δομή κάθε πίνακα αλλά να συμπεριλάβετε δεδομένα INSERT μόνο για τους τρεις πίνακες που πραγματικά χρειάζεστε — αφήνοντας τον πίνακα logs με τις 89 εκατομμύρια γραμμές ως ένα άδειο κέλυφος. Αυτό είναι κάτι που καμία σημαία --no-data δεν μπορεί να εκφράσει.

Διαχωρίστε τη δομή από τα δεδομένα σε δευτερόλεπτα

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

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

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

Μπορώ να εξάγω τα δεδομένα χωρίς το σχήμα;

Ναι. Απενεργοποιήστε τα CREATE TABLE και CREATE INDEX (ή επιλέξτε την προεπιλογή Μόνο δεδομένα) και κρατήστε το INSERT INTO. Το DumpCleaner εξάγει μόνο τις γραμμές, έτοιμες να φορτωθούν σε ένα σχήμα που υπάρχει ήδη.

Διατηρεί μια εξαγωγή μόνο-δομής τα indexes και τα ξένα κλειδιά;

Ναι. Η επιλογή Μόνο δομή κρατά τα CREATE TABLE, CREATE INDEX, ALTER TABLE και τους ορισμούς ξένων κλειδιών — όλα όσα ορίζουν τη βάση δεδομένων. Μόνο οι γραμμές δεδομένων INSERT αφαιρούνται.

Μπορώ να συνδυάσω — δομή για όλους τους πίνακες, δεδομένα για μερικούς;

Ναι. Το φιλτράρισμα γίνεται ανά τύπο εντολής και ανά πίνακα, και τα δύο συνδυάζονται. Κρατήστε τη δομή κάθε πίνακα αλλά συμπεριλάβετε δεδομένα INSERT μόνο για τους λίγους πίνακες που πραγματικά χρειάζεστε.

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

Ναι. Το DumpCleaner διαβάζει dumps MySQL, MariaDB και PostgreSQL και εντοπίζει τη μορφή αυτόματα, οπότε οι εξαγωγές μόνο-δομής και μόνο-δεδομένων λειτουργούν με τον ίδιο τρόπο για αρχεία pg_dump.

Σχήμα χωρίς τα δεδομένα — ή δεδομένα χωρίς το σχήμα

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

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