בדף הזה מתואר התהליך להגדרת שכפול כשקיים קובץ dump שיצרתם מהשרת החיצוני.
אתם צריכים להשלים את כל השלבים בדף הזה. אחרי שמסיימים, אפשר לנהל ולנטר את מופע הייצוג של המקור באותו אופן שבו מנהלים ומנטרים כל מופע אחר של Cloud SQL.
לפני שמתחילים
לפני שמתחילים, צריך להגדיר את השרת החיצוני, ליצור את מופע הייצוג של המקור ולהגדיר את הרפליקה של Cloud SQL.
עדכון ההרשאות של משתמש השכפול
משתמש השכפול בשרת החיצוני מוגדר לקבל חיבורים מכל מארח (%). צריך לעדכן את חשבון המשתמש הזה כך שאפשר יהיה להשתמש בו רק עם הרפליקה של Cloud SQL.
פותחים טרמינל בשרת החיצוני ומזינים את הפקודות הבאות:
לקוח mysql
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE ON *.* TO 'GCP_USERNAME'@'HOST'; FLUSH PRIVILEGES;
דוגמה
UPDATE mysql.user SET Host='192.0.2.0' WHERE Host='%' AND User='replicationUser'; GRANT REPLICATION SLAVE, EXECUTE ON *.* TO 'gcp_user'@'gmail.com'; FLUSH PRIVILEGES;
| מאפיין (property) | תיאור |
|---|---|
| NEW_HOST | מציינים את כתובת ה-IP היוצאת של העותק המשוכפל של Cloud SQL. |
| OLD_HOST | הערך הנוכחי שמוקצה למאפיין Host שרוצים לשנות. |
| USERNAME | חשבון המשתמש של השכפול בשרת החיצוני. |
| GCP_USERNAME | שם המשתמש בחשבון המשתמש ב Google Cloud פלטפורמה (GCP). |
| HOST | שם המארח של חשבון המשתמש בפלטפורמה (GCP). Google Cloud |
אימות הגדרות השכפול
אחרי שמשלימים את ההגדרה, מוודאים שהרפליקה של Cloud SQL יכולה לשכפל מהשרת החיצוני.
קודם כל, מוודאים שהגדרות הסנכרון החיצוני נכונות. כדי לעשות את זה, משתמשים בפקודות הבאות כדי לאמת:
- קישוריות בין העותק המשוכפל של Cloud SQL לבין שרת חיצוני
- הרשאות משתמש לשכפול
- תאימות גרסאות
- השכפול של הרפליקה ב-Cloud SQL לא מתבצע כבר
- קבצי ה-binlog מופעלים בשרת החיצוני
- מופעל מזהה עסקה גלובלי (GTID)
פותחים טרמינל ומזינים את הפקודות הבאות כדי לוודא שהגדרות הסנכרון החיצוני נכונות:
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"skipVerification": "SKIP_VERIFICATION"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/verifyExternalSyncSettings
דוגמה
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
| מאפיין (property) | תיאור |
|---|---|
| SYNC_MODE | verifyExternalSyncSettings מוודא שאפשר לשמור את הרפליקה של Cloud SQL ואת השרת החיצוני מסונכרנים אחרי שהרפליקציה מוגדרת. מצבי הסנכרון כוללים EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE ו-OFFLINE. |
| SKIP_VERIFICATION | האם לדלג על שלב האימות המובנה לפני סנכרון הנתונים. מומלץ רק אם כבר אימתתם את הגדרות השכפול. |
| PROJECT_ID | המזהה של הפרויקט ב- Google Cloud. |
| REPLICA_INSTANCE | המזהה של רפליקת Cloud SQL. |
ייצוא מסד הנתונים לקטגוריה של Cloud Storage
אפשר לאכלס רפליקה של Cloud SQL באמצעות קובץ mysqldump שנמצא בקטגוריה של Cloud Storage. התנאים האלה חלים:
- חובה להשתמש בכלי
mysqldumpשכלול ב-MySQL. - בזמן ש-
mysqldumpפועל, אל תבצעו פעולות DDL בשרת החיצוני. הפעולה הזו עלולה לגרום לחוסר עקביות בקובץ הייצוא.
כדי לייצא את מסד הנתונים לקטגוריה של Cloud Storage, פועלים לפי השלבים הבאים:
- ב- Google Cloud, יוצרים קטגוריה של Cloud Storage.
- פותחים טרמינל באמצעות לקוח שמתחבר לשרת מסד הנתונים החיצוני ומריצים את הפקודה הבאה.
mysqldump
mysqldump \ --host=EXTERNAL_HOST \ --port=EXTERNAL_PORT \ --user=USERNAME\ --password=PASSWORD \ --databases=DATABASE_LIST \ --hex-blob \ SOURCE_DATA \ --no-autocommit \ --default-character-set=utf8mb4 \ --single-transaction \ --set-gtid-purged=on \ ADD_DROP_TABLE \ ROUTINES \ COMPRESS \ GZIP \ | gcloud storage cp - gs://BUCKET/DUMP_FILENAME
דוגמה
mysqldump \ --host=192.0.2.1 \ --port=3306 \ --user=replicationUser \ --password \ --databases guestbook journal \ --hex-blob \ --master-data=1 \ --no-autocommit \ --default-character-set=utf8mb4 \ --single-transaction \ --compress \ | gzip \ | gcloud storage cp - gs://replica-bucket/external-database.sql.gz
| מאפיין (property) | תיאור |
|---|---|
| EXTERNAL_HOST | כתובת ה-IPv4 או ה-DNS של השרת החיצוני. |
| EXTERNAL_PORT | היציאה של השרת החיצוני.
אם השרת החיצוני מתארח ב-Cloud SQL, הערך הוא 3306. |
| USERNAME | השם של חשבון המשתמש לשכפול או של חשבון המשתמש בשרת החיצוני שיש לו הרשאות קריאה של מסד הנתונים. |
| PASSWORD | סיסמת משתמש השכפול. |
| DATABASE_LIST | רשימה של כל מסדי הנתונים בשרת החיצוני, מופרדים באמצעות רווחים, למעט מסדי הנתונים של המערכת (sys, mysql, performance_schema ו-information_schema). אפשר להשתמש בפקודה SHOW DATABASES MySQL כדי להציג את מסדי הנתונים. |
| SOURCE_DATA | אם אתם משתמשים בגרסה קודמת של MySQL מגרסה 8.0.26,
אז צריך להשתמש בערך --master-data לפרמטר הזה.
בגרסאות של MySQL מ-8.0.26 ואילך,
מגדירים את הערך של הפרמטר הזה ל---source-data. |
| ADD_DROP_TABLE | אם רוצים להוסיף הצהרת DROP TABLE לפני כל הצהרת CREATE TABLE, צריך לכלול את --add-drop-table. |
| ROUTINES | אם רוצים להציג את התרחישים המאוחסנים, כמו פרוצדורות ופונקציות, בפלט של מסדי הנתונים שנוצרו, צריך לכלול את --routines. |
| COMPRESS | אם רוצים לדחוס את כל המידע שנשלח בין הרפליקה של Cloud SQL לבין השרת החיצוני, משתמשים ב---compress. |
| GZIP | אם רוצים לדחוס את קובץ ה-dump עוד יותר, משתמשים ב-| gzip. אם מסד הנתונים שלכם מכיל נתונים שלא ניתן לדחוס היטב, כמו נתונים בינאריים שלא ניתן לדחוס או תמונות JPG, אל תשתמשו באפשרות הזו. |
| BUCKET | השם של הקטגוריה שיצרתם בשלב 1 כדי שתכיל את קובץ ה-dump. |
| DUMP_FILENAME | נוצר קובץ בשם הזה בקטגוריה. הקובץ הזה מכיל את התוכן של מסד הנתונים בשרת החיצוני שלכם. |
מעדכנים את מופע הייצוג של המקור בנתיב הקובץ של הקטגוריה ב-Cloud Storage
מופע הייצוג של המקור הוא מופע Cloud SQL שמייצג את שרת מסד הנתונים של המקור עבור הרפליקה של Cloud SQL. הוא מוצג במסוף Google Cloud ונראה כמו מופע רגיל של Cloud SQL, אבל הוא לא מכיל נתונים, לא דורש הגדרה או תחזוקה ולא משפיע על החיוב.
הקובץ source.json מכיל מידע על מופע הייצוג של המקור.
REST
{ "name": "PRIMARY_INSTANCE_NAME", "region": "REGION_NAME", "databaseVersion": "DB_NAME_AND_VERSION", "onPremisesConfiguration": { "hostPort": "IP_ADDRESS_AND_PORT", "username": "USERNAME", "password": "PASSWORD" }, "dumpFilePath" :"DUMP_FILE_PATH" }
דוגמה
{ "name": "cloudsql-source-instance", "region": "us-central1", "databaseVersion": "MYSQL_5_7", "onPremisesConfiguration": { "hostPort": "192.0.2.0:3306", "username": "replicationUser", "password": "486#@%*@" }, "dumpFilePath" :"gs://replica-bucket/source-database.sql.gz" }
| מאפיין (property) | תיאור |
|---|---|
| PRIMARY_INSTANCE_NAME | השם של מופע Cloud SQL שמשויך למופע של ייצוג המקור. |
| REGION_NAME | השם של האזור שמוקצה למופע של ייצוג המקור. |
| DB_NAME_AND_VERSION | השם ומספר הגרסה של מסד הנתונים שמשויך למופע של ייצוג המקור. |
| IP_ADDRESS_AND_PORT | כתובת ה-IP ומספר היציאה ששמורים למופע של ייצוג המקור. |
| USERNAME | שם המשתמש של מופע הייצוג של המקור. |
| PASSWORD | הסיסמה של מופע ייצוג המקור. |
| DUMP_FILE_PATH | הנתיב של קובץ ה-dump שמכיל את התוכן של מסד הנתונים בשרת החיצוני. |
אחרי שמגדירים את רפליקת Cloud SQL, צריך לעדכן את מופע הייצוג של המקור בנתיב הקובץ של קטגוריה של Cloud Storage.
REST
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @JSON_PATH \ -X PATCH \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/SOURCE_REPRESENTATION_INSTANCE
דוגמה
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @./source.json \ -X PATCH \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
| מאפיין (property) | תיאור |
|---|---|
| JSON_PATH | הנתיב של הקובץ JSON שמאוחסן בקטגוריה של Cloud Storage.
הקובץ הזה מכיל נתונים על מופע ייצוג המקור. |
| PROJECT_ID | המזהה של הפרויקט ב- Google Cloud. |
| SOURCE_REPRESENTATION_INSTANCE | השם של מופע ייצוג המקור. |
הפעלת השכפול בשרת החיצוני
אחרי שמוודאים שאפשר לשכפל מהשרת החיצוני, אפשר לבצע את השכפול.
במהלך תהליך הייבוא הראשוני, אל תבצעו פעולות DDL בשרת החיצוני. פעולה כזו עלולה לגרום לחוסר עקביות במהלך הייבוא. אחרי שתהליך הייבוא מסתיים, הרפליקה משתמשת ביומני הנתונים הבינאריים בשרת החיצוני כדי להתעדכן במצב הנוכחי של השרת החיצוני.
פותחים טרמינל, מתחברים באמצעות gcloud ומזינים את הפקודה curl כדי לשכפל מהשרת החיצוני.
REST
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "syncMode": "SYNC_MODE", "skipVerification": "SKIP_VERIFICATION" }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE/startExternalSync
דוגמה
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "syncMode": "online", "skipVerification": false }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
| מאפיין (property) | תיאור |
|---|---|
| SYNC_MODE | מוודא שאפשר לשמור על סנכרון בין הרפליקה של Cloud SQL לבין השרת החיצוני אחרי שהרפליקציה מוגדרת. |
| SKIP_VERIFICATION | האם לדלג על שלב האימות המובנה לפני סנכרון הנתונים. מומלץ רק אם כבר אימתתם את הגדרות השכפול. |
| PROJECT_ID | המזהה של הפרויקט ב- Google Cloud. |
| REPLICA_INSTANCE | המזהה של רפליקת Cloud SQL. |
פינוי מקום באחסון
אם שכפלתם מקובץ בדלי, אתם יכולים להסיר את הקובץ והדלי. במסמכי העזרה של Cloud Storage מוסבר איך למחוק אובייקטים ואיך למחוק קטגוריות.
המשך השכפול
אחרי שמתחילים את השכפול מהשרת החיצוני, צריך לעקוב אחרי השכפול ואז להשלים את ההעברה. מידע נוסף זמין במאמר בנושא מעקב אחרי רפליקציה.
פתרון בעיות
| שגיאה | פתרון בעיות |
|---|---|
Lost connection to MySQL server during query when dumping table. |
יכול להיות שהמקור הפך ללא זמין, או שה-dump הכיל חבילות גדולות מדי.
מוודאים שהמקור הראשי החיצוני זמין לחיבור. אפשר גם לשנות את הערכים של הדגלים net_read_timeout ו-net_write_timeout במופע המקור כדי שהשגיאה לא תופיע יותר. מידע נוסף על הערכים המותרים של הדגלים האלה זמין במאמר בנושא הגדרת דגלים של מסד נתונים. מידע נוסף על שימוש בדגלים של |
| המיגרציה הראשונית של הנתונים הושלמה, אבל לא מתבצעת שכפול של הנתונים. | אחת הסיבות האפשריות לבעיה היא שבמסד הנתונים של המקור הוגדרו דגלי שכפול שגורמים לכך שחלק מהשינויים במסד הנתונים או כולם לא משוכפלים.
מוודאים שדגלי השכפול, כמו מריצים את הפקודה |
| המיגרציה הראשונית של הנתונים הושלמה בהצלחה, אבל שכפול הנתונים מפסיק לפעול אחרי זמן מה. | פעולות שכדאי לנסות:
|
mysqld check failed: data disk is full. |
דיסק הנתונים של מופע הרפליקה מלא.
מגדילים את גודל הדיסק של מכונת הרפליקה. אפשר להגדיל את גודל הדיסק באופן ידני או להפעיל הגדלה אוטומטית של נפח האחסון. |
בדיקת יומני השכפול
כשמאמתים את הגדרות השכפול, נוצרים יומנים.
כדי לראות את היומנים האלה:
נכנסים אל Logs Viewer במסוף Google Cloud .
- בתפריט הנפתח Instance (מופע), בוחרים את הרפליקה של Cloud SQL.
- בוחרים את קובץ היומן
replication-setup.log.
אם הרפליקה של Cloud SQL לא מצליחה להתחבר לשרת החיצוני, צריך לוודא את הדברים הבאים:
- חומת אש בשרת החיצוני מוגדרת כך שהיא מאפשרת חיבורים מכתובת ה-IP היוצאת של העותק המשוכפל של Cloud SQL.
- הגדרת ה-SSL/TLS נכונה.
- המשתמש, המארח והסיסמה של השכפול נכונים.
המאמרים הבאים
- מידע נוסף על עדכון של מופע
- מידע נוסף על ניהול רפליקות
- מידע על מעקב אחר מופעים
- מידע על קידום של רפליקה ב-Cloud SQL כדי לקדם את הרפליקה למכונה עצמאית ולהפסיק את השכפול מהשרת החיצוני