שלושה מצבים חוזרים על עצמם:
- הקמת סכמה ל-staging או CI — אתם רוצים את מבנה הטבלה הריק כדי שבדיקות יוכלו לרוץ מול עמודות, אינדקסים ואילוצים אמיתיים, אבל אתם ממש לא רוצים לשלוח ג'יגה-בייטים של שורות ייצור לסביבה חד-פעמית.
- נתוני seed בלבד — הסכמה כבר קיימת במסד הנתונים היעד, ואתם רק צריכים את שורות ה-INSERT כדי לאכלס אותה, בלי פקודות CREATE שיתנגשו עם מה שכבר שם.
- היפטרות מרעש — ה-dump מנופח על ידי טבלאות
logs,sessions,audit_trailאוcacheעם עשרות מיליוני שורות שאתם אף פעם לא רוצים לייבא.
למה 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 קטן ומסודר — ואז נשבר על אמיתי:
- INSERTs רב-שורתיים.
INSERT INTO … VALUESיחיד יכול להשתרע על אלפי שורות.grepמתאים לשורה הראשונה ומשאיר את שאר הערכים יתומים, מייצר קובץ שבור. - Extended inserts. mysqldump מקבץ הרבה שורות לפקודה ענקית אחת. מסננים מבוססי-שורה לא יכולים לדעת איפה פקודה כזו מסתיימת.
- הערות ובלוקים. בלוקים מותנים
/*! … */,LOCK TABLES, והערות--משתלבים עם הנתונים, אז מסנן נאיבי או שומר זבל או חותך משהו שהייבוא צריך. - נתונים בלבד גרוע יותר.
grep '^INSERT'טהור זורק את פקודות ה-SETוה-LOCKשהשורות תלויות בהן, וכל INSERT שלא מתחיל בדיוק בעמודה אפס נעלם בשקט.
אתם בסוף מנפים באגים במסנן שלכם עצמכם במקום לקבל את הסכמה שלכם.
מבנה בלבד או נתונים בלבד עם DumpCleaner
DumpCleaner מבין פקודות SQL במקום להתאים שורות, אז הוא מפריד מבנה מנתונים באמינות — על קבצים בכל גודל:
- גררו את קובץ ה-
.sqlשלכם לתוך DumpCleaner (MySQL, MariaDB או PostgreSQL). הוא מפרק את הקובץ בהזרמה, אז dump של כמה ג'יגה-בייט נטען עם זיכרון קבוע. - החליפו את סוגי הפקודות שאתם רוצים: CREATE TABLE, CREATE INDEX, INSERT INTO, ALTER, DROP, LOCK, SET. בטלו את הסימון של INSERT INTO ותקבלו מבנה בלבד; בטלו את הסימון של CREATE TABLE / CREATE INDEX ותקבלו נתונים בלבד.
- או בחרו preset — מבנה בלבד או נתונים בלבד — כדי להגדיר כל מתג בשלב אחד, ואז שכללו לפי טבלה אם תרצו.
- ייצאו. אתם מקבלים קובץ סכמה רזה ל-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