ייצוא מסד נתונים של MySQL באמצעות mysqldump

אפשר להריץ את כלי השירות mysqldump ישירות מול מסד הנתונים של MySQL, באמצעות האפשרויות שנדרשות לכם. עם זאת, אם מייצאים כדי לייבא את הנתונים למסד נתונים של Cloud SQL, צריך להשתמש בכלי mysqldump עם הדגלים הבאים:

  • --databases מציינים רשימה מפורשת של מסדי נתונים לייצוא. הרשימה הזו לא יכולה לכלול את מסדי הנתונים של המערכת (sys,‏ mysql,‏ performance_schema ו-information_schema).
  • --hex-blob אם מסד הנתונים מכיל שדות בינאריים, צריך להשתמש בדגל הזה כדי לוודא שהשדות הבינאריים מיובאים בצורה נכונה.
  • --single-transaction מתחיל עסקה לפני ההפעלה. במקום לנעול את כל מסד הנתונים, הפקודה מאפשרת ל-mysqldump לקרוא את מסד הנתונים במצב הנוכחי, וכך ליצור dump עקבי של הנתונים.
  • --routines כדי לכלול פונקציות ותהליכים מאוחסנים.
  • כשמשתמשים בגרסה mysqldump 8 ואילך כדי לייצא מסדי נתונים של MySQL בגרסאות קודמות ל-8:
    --column-statistics=0

    הדגל הזה מסיר את הטבלה COLUMN_STATISTICS מייצוא מסד הנתונים כדי למנוע את השגיאה Unknown table 'COLUMN_STATISTICS' in information_schema (1109). מידע נוסף מופיע במאמר אבחון בעיות.

מומלץ גם להשתמש בדגלים הבאים:

  • --no-autocommit
  • --default-character-set=utf8mb4
  • --master-data

ממכונה עם קישוריות לרשת לשרת MySQL, מריצים את הפקודה הבאה:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --master-data=1  \
        --single-transaction \
        --routines \
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

אם המקור של ההעברה הוא שירות מסד נתונים רלציוני (RDS) ל-MySQL:

  • המאפיין master-data לא נתמך.
  • אם שרת מסד הנתונים של המקור תומך ב-GTID, צריך להשתמש במאפיין --set-gtid-purged=on. אחרת, לא משתמשים במאפיין הזה.
  • אם אתם משתמשים בגיבוי ידני כדי להעביר את הנתונים, אתם צריכים לבצע את ההעברה עם GTID מופעל.

הפקודה עשויה להיראות כמו בדוגמה הבאה:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --set-gtid-purged=on \
        --single-transaction \
        --routines \ 
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

בנוסף, כדאי להגדיר את מופעי RDS כך שישמרו את יומני ה-binlog למשך זמן ארוך יותר. הפקודה עשויה להיראות כמו בדוגמה הבאה:

    # Sets the retention period to one week.
    call mysql.rds_set_configuration('binlog retention hours', 168);

מחליפים את [PROPERTIES_IN_BRACKETS] בערכים הבאים:

מאפיין (property) ערך
[SOURCE_ADDR] כתובת ה-IPv4 או שם המארח של שרת מסד הנתונים של המקור.
[SOURCE_PORT] היציאה של שרת מסד הנתונים של המקור.
[USERNAME] חשבון המשתמש ב-MySQL.
[DBS] רשימה של מסדי הנתונים בשרת מסד הנתונים של המקור, שמופרדת באמצעות רווחים, שצריך לכלול בקובץ ה-dump. כדי להציג את מסדי הנתונים, משתמשים בפקודה SHOW DATABASES MySQL.
[BUCKET_NAME] הקטגוריה ב-Cloud Storage שנוצרה על ידי המשתמש ומשמשת לאחסון קובץ ה-dump (לדוגמה, replica-bucket).
[DUMP_FILENAME] שם הקובץ של ה-dump, שמסתיים בסיומת .gz (לדוגמה, source-database.sql.gz).