ייצוא הסכמה (מבנה) בלבד מ-SQL dump

יש לכם dump מלא בדיסק, אבל אתם רוצים רק את המבנה — CREATE TABLE, אינדקסים, מפתחות זרים — בלי טבלאות הלוג של 89 מיליון שורות. או ההפך: רק את הנתונים, בלי פקודות CREATE. הנה למה דגלי ה-dump הרגילים לא עוזרים לקובץ קיים, ואיך להפריד מבנה מנתונים בלחיצה אחת.

שלושה מצבים חוזרים על עצמם:

למה mysqldump --no-data לא מספיק

העצה הקלאסית היא mysqldump --no-data (מבנה בלבד) או mysqldump --no-create-info (נתונים בלבד). שניהם דגלי ייצוא: הם משנים מה ש-dump חדש ממסד נתונים פעיל מכיל. הם לא עושים כלום עבור dump שכבר יש לכם על הדיסק כקובץ .sql.

בפועל הקובץ מגיע לעיתים קרובות ממישהו אחר, או ממשימת גיבוי, או משרת שכבר אין לכם גישה חיה אליו. אתם לא יכולים להריץ מחדש mysqldump מול מסד נתונים שאינו נגיש — האישורים איבדו, השרת הוצא משירות, או שהקובץ פשוט זה כל מה שקיבלתם. בשלב הזה הדגלים חסרי תועלת, ואתם נשארים לערוך את הקובץ עצמו.

הדרך הידנית

המהלך המתבקש הוא להסיר שורות עם grep או sed. כדי לשמור על המבנה ולהפיל את הנתונים:

# שמור על הכל חוץ משורות INSERT
grep -v '^INSERT INTO' dump.sql > schema.sql

# או שמור רק על שורות INSERT לקובץ נתונים בלבד
grep '^INSERT INTO' dump.sql > data.sql

זה נראה בסדר על dump קטן ומסודר — ואז נשבר על אמיתי:

אתם בסוף מנפים באגים במסנן שלכם עצמכם במקום לקבל את הסכמה שלכם.

מבנה בלבד או נתונים בלבד עם DumpCleaner

DumpCleaner מבין פקודות SQL במקום להתאים שורות, אז הוא מפריד מבנה מנתונים באמינות — על קבצים בכל גודל:

  1. גררו את קובץ ה-.sql שלכם לתוך DumpCleaner (MySQL, MariaDB או PostgreSQL). הוא מפרק את הקובץ בהזרמה, אז dump של כמה ג'יגה-בייט נטען עם זיכרון קבוע.
  2. החליפו את סוגי הפקודות שאתם רוצים: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. בטלו את הסימון של INSERT INTO ותקבלו מבנה בלבד; בטלו את הסימון של CREATE TABLE / CREATE INDEX ותקבלו נתונים בלבד.
  3. או בחרו preset — מבנה בלבד או נתונים בלבד — כדי להגדיר כל מתג בשלב אחד, ואז שכללו לפי טבלה אם תרצו.
  4. ייצאו. אתם מקבלים קובץ סכמה רזה ל-staging או CI, או dump נתונים-בלבד נקי ל-seeding.

מכיוון שהמסנן מודע-לפקודות, INSERT מורחב רב-שורתי נשמר או מופל כמכלול — לעולם לא נחתך באמצע.

העוצמה האמיתית היא שהסינון עובד לפי סוג פקודה ולפי טבלה, והשניים משתלבים. אתם יכולים לשמור על המבנה של כל טבלה אבל לכלול נתוני INSERT רק עבור שלוש הטבלאות שאתם באמת צריכים — ולהשאיר את טבלת ה-logs של 89 מיליון שורות כמעטפת ריקה. זה משהו ששום דגל --no-data לא יכול לבטא.

הפרידו מבנה מנתונים תוך שניות

DumpCleaner מסנן dump קיים לפי סוג פקודה ולפי טבלה — מבנה בלבד, נתונים בלבד, או כל תערובת — בזרימה, עם זיכרון קבוע. אפליקציית macOS & iPadOS מקורית, רכישה חד-פעמית.

הורדה מ-App Store

שאלות נפוצות

האם אני יכול לייצא את הנתונים בלי הסכמה?

כן. השביתו את CREATE TABLE ו-CREATE INDEX (או בחרו את ה-preset נתונים בלבד) ושמרו על INSERT INTO. DumpCleaner מייצא רק את השורות, מוכן לטעינה לתוך סכמה שכבר קיימת.

האם ייצוא מבנה-בלבד שומר על אינדקסים ומפתחות זרים?

כן. מבנה בלבד שומר על CREATE TABLE, CREATE INDEX, ALTER TABLE והגדרות המפתח הזר — כל מה שמגדיר את מסד הנתונים. רק שורות נתוני ה-INSERT מוסרות.

האם אני יכול לערבב — מבנה לכל הטבלאות, נתונים לחלק?

כן. הסינון הוא לפי סוג פקודה ולפי טבלה, ושניהם משתלבים. שמרו על המבנה של כל טבלה אבל כללו נתוני INSERT רק עבור מעט הטבלאות שאתם באמת צריכים.

האם זה עובד עם PostgreSQL?

כן. DumpCleaner קורא dumps של MySQL, MariaDB ו-PostgreSQL ומזהה את הפורמט אוטומטית, כך שייצוא מבנה-בלבד ונתונים-בלבד עובד באותה דרך עבור קובצי pg_dump.

סכמה בלי הנתונים — או נתונים בלי הסכמה

גררו, החליפו את סוגי הפקודות, ייצאו. DumpCleaner מפצל כל dump בדיוק לחלק שאתם צריכים.

הורדה מ-App Store