ייצוא מסד נתונים של 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).

המאמרים הבאים

הוראות מפורטות להעברה מופיעות במאמר תחילת העבודה עם העברות ל-Cloud SQL ל-MySQL.