בדף הזה מוסבר איך להגדיר ייבוא מנוהל של נתונים ולהשתמש בו כשמשכפלים משרת חיצוני ל-Cloud SQL.
אתם צריכים להשלים את כל השלבים בדף הזה. בסיום התהליך, תוכלו לנהל ולנטר את מכונת הייצוג של המקור בדיוק כמו כל מכונה אחרת של Cloud SQL.
לפני שמתחילים
לפני שמתחילים, צריך לבצע את השלבים הבאים:
עדכון ההרשאות של משתמש השכפול
משתמש השכפול בשרת החיצוני מוגדר לקבל חיבורים מכל מארח (%). צריך לעדכן את חשבון המשתמש הזה כך שאפשר יהיה להשתמש בו רק עם הרפליקה של Cloud SQL.
הרשאות נדרשות
יש ארבעה סוגים של שילובים של העברות וגיבויים.
- סוג 1: העברה רציפה וגיבוי מנוהל
- סוג 2: העברה רציפה ופריקה ידנית
- סוג 3: העברה חד-פעמית ופריקה מנוהלת
- סוג 4: העברה חד-פעמית ופריקה ידנית
בהמשך מפורטות ההרשאות לכל סוג של העברה ושילוב של נתונים.
סוג 1
לחשבון המשתמש צריכות להיות ההרשאות הבאות:
- REPLICATION SLAVE
- EXECUTE
- SELECT
- הצגת התצוגה
- REPLICATION CLIENT
- טעינה מחדש
- TRIGGER
- (להעברה מ-Amazon RDS ומ-Amazon Aurora בלבד) LOCK TABLES
ב-MySQL גרסה 8.0 ואילך, מומלץ לדלג על ההרשאה BACKUP ADMIN כדי לקבל ביצועים אופטימליים.
Type 2
לחשבון המשתמש צריכות להיות ההרשאות הבאות:
סוג 3
לחשבון המשתמש צריכות להיות ההרשאות הבאות:
- SELECT
- הצגת התצוגה
- TRIGGER
- (בהעברה ממקורות עם הגדרה של
GTID_MODE = ONבלבד) טעינה מחדש
ב-MySQL גרסה 8.0 ואילך, מומלץ לדלג על ההרשאה BACKUP ADMIN כדי לקבל ביצועים אופטימליים.
סוג 4
לא נדרשות הרשאות.
עדכון הרשאות
כדי לעדכן את ההרשאות, פותחים טרמינל בשרת החיצוני ומזינים את הפקודות הבאות.
לקוח mysql
ל-GTID:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT, RELOAD ON . TO 'USERNAME'@'HOST'; FLUSH PRIVILEGES;
עבור binlog:
UPDATE mysql.user SET Host='NEW_HOST' WHERE Host='OLD_HOST' AND User='USERNAME'; GRANT REPLICATION SLAVE, EXECUTE, SELECT, SHOW VIEW, REPLICATION CLIENT, RELOAD 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, SELECT, SHOW VIEW, REPLICATION CLIENT,
RELOAD ON *.* TO 'username'@'host.com';
FLUSH PRIVILEGES;
| מאפיין (property) | תיאור |
|---|---|
| NEW_HOST | מציינים את כתובת ה-IP היוצאת של העותק המשוכפל של Cloud SQL. |
| OLD_HOST | הערך הנוכחי שמוקצה למאפיין Host שרוצים לשנות. |
| USERNAME | חשבון המשתמש של השכפול בשרת החיצוני. |
| GCP_USERNAME | שם המשתמש של חשבון המשתמש. |
| HOST | שם המארח של חשבון המשתמש. |
אימות הגדרות השכפול
אחרי שמשלימים את ההגדרה, מוודאים שהרפליקה של Cloud SQL יכולה לשכפל מהשרת החיצוני.
ההגדרות הבאות של סנכרון חיצוני צריכות להיות נכונות.
- קישוריות בין העותק המשוכפל של Cloud SQL לבין שרת חיצוני
- הרשאות משתמש לשכפול
- תאימות גרסאות
- השכפול של הרפליקה ב-Cloud SQL לא מתבצע כבר
- קבצי ה-binlog מופעלים בשרת החיצוני
- אם אתם מנסים לבצע סנכרון חיצוני משרת חיצוני של RDS ומשתמשים בדלי Cloud de Confiance , ה-GTID מופעל.
כדי לוודא שההגדרות האלה תקינות, פותחים טרמינל ב-Cloud Shell ומזינים את הפקודות הבאות:
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",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/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",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/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",
"syncParallelLevel": "optimal"
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/verifyExternalSyncSettings
הקריאות האלה מחזירות רשימה מהסוג sql#externalSyncSettingErrorList.
אם הרשימה ריקה, אין שגיאות. תגובה ללא שגיאות נראית כך:
{ "kind": "sql#externalSyncSettingErrorList" }
| מאפיין (property) | תיאור |
|---|---|
| SYNC_MODE | מוודאים שאפשר לשמור על סנכרון בין הרפליקה של Cloud SQL לבין השרת החיצוני אחרי שמגדירים את השכפול. מצבי הסנכרון כוללים את EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE ו-OFFLINE. |
| SYNC_PARALLEL_LEVEL | בודקים את ההגדרה שקובעת את המהירות שבה הנתונים מועברים מטבלאות של מסד נתונים. הערכים הבאים זמינים:
הערה: ערך ברירת המחדל של הפרמטר הזה הוא |
| SYNC_FLAGS | רשימה של דגלים של סנכרון ראשוני לאימות. מומלץ רק אם אתם מתכננים להשתמש בדגלי סנכרון מותאמים אישית כשאתם משכפלים מהמקור. רשימה של הדגלים המותרים מופיעה במאמר דגלים של סנכרון ראשוני. |
| PROJECT_ID | המזהה של Cloud de Confiance הפרויקט. |
| REPLICA_INSTANCE_ID | המזהה של רפליקת Cloud SQL. |
הרשאת נעילה גלובלית לקריאה
אם אין לכם הרשאה לגשת לנעילת הקריאה הגלובלית בשרת החיצוני, כמו במקרה של Amazon RDS ו-Amazon Aurora, צריך להשהות את פעולות הכתיבה לשרת לפי השלבים הבאים:
- עוברים אל Logs Explorer ובוחרים את הרפליקה של Cloud SQL מתוך רשימת המשאבים. תוצג רשימה של היומנים האחרונים של העותק המשוכפל של Cloud SQL. אפשר להתעלם מהם בשלב הזה.
- פותחים טרמינל ומזינים את הפקודות שבקטע הפעלת השכפול בשרת החיצוני כדי לשכפל מהשרת החיצוני.
חוזרים אל Logs Explorer. אם היומן נראה כמו בדוגמה הבאה, צריך להפסיק את הכתיבה למסד הנתונים בשרת החיצוני. ברוב המקרים, נדרש אימות רק למשך כמה שניות.
DUMP_IMPORT(START): Start importing data, please pause any write to the external primary database.אם רואים את רשומת היומן הבאה בכלי Logs Explorer, צריך להפעיל מחדש את הכתיבה למסד הנתונים בשרת החיצוני.
DUMP_IMPORT(SYNC): Consistent state on primary and replica. Writes to the external primary may resume.
הפעלת השכפול בשרת החיצוני
אחרי שמוודאים שאפשר לשכפל מהשרת החיצוני, מתחילים את השכפול. המהירות של ביצוע השכפול בתהליך הייבוא הראשוני היא עד 500GB לשעה. עם זאת, המהירות הזו יכולה להשתנות בהתאם לרמת המכונה, לגודל דיסק הנתונים, לתפוקת הרשת ולסוג מסד הנתונים.
במהלך תהליך הייבוא הראשוני, אל תבצעו פעולות DDL בשרת החיצוני. פעולה כזו עלולה לגרום לחוסר עקביות במהלך הייבוא. אחרי שתהליך הייבוא מסתיים, הרפליקה משתמשת ביומני הנתונים הבינאריים בשרת החיצוני כדי להתעדכן במצב הנוכחי של השרת החיצוני.
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",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"mysqlSyncConfig": {
"initialSyncFlags": "SYNC_FLAGS"
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/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",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/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",
"syncParallelLevel": "optimal"
"skipVerification": false,
"mysqlSyncConfig": {
"initialSyncFlags": [{"name": "max-allowed-packet", "value": "1073741824"}, {"name": "hex-blob"}, {"name": "compress"}]
}
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
| מאפיין (property) | תיאור |
|---|---|
| SYNC_MODE | מוודאים שאפשר לשמור על סנכרון בין הרפליקה של Cloud SQL לבין השרת החיצוני אחרי שמגדירים את השכפול. |
| SKIP_VERIFICATION | האם לדלג על שלב האימות המובנה לפני סנכרון הנתונים. מומלץ להשתמש בפרמטר הזה רק אם כבר אימתתם את הגדרות השכפול. |
| SYNC_PARALLEL_LEVEL | צריך לספק הגדרה ששולטת במהירות שבה מועברים נתונים מטבלאות של מסד נתונים. הערכים הבאים זמינים:
הערה: ערך ברירת המחדל של הפרמטר הזה הוא |
| SYNC_FLAGS | רשימה של דגלים של סנכרון ראשוני לאימות. מומלץ רק אם אתם מתכננים להשתמש בדגלי סנכרון מותאמים אישית כשאתם משכפלים מהמקור. רשימה של הדגלים המותרים מופיעה במאמר דגלים של סנכרון ראשוני. |
| PROJECT_ID | המזהה של Cloud de Confiance הפרויקט. |
| REPLICA_INSTANCE_ID | המזהה של רפליקת Cloud SQL. |
התרעות לגבי סנכרון ראשוני
כדי לבצע מיגרציה עם דגלים מותאמים אישית של מסד נתונים, אפשר להשתמש בדגלים המותרים הבאים:
- --add-drop-database
- --add-drop-table
- --add-drop-trigger
- --add-locks
- --allow-keywords
- --all-tablespaces
- --apply-slave-statements
- --column-statistics
- --comments
- --compact
- --compatible
- --complete-insert
- --compress
- --compression-algorithms
- --create-options
- --default-character-set
- --delayed-insert
- --disable-keys
- --dump-date
- --events
- --extended-insert
- --fields-enclosed-by
- --fields-escaped-by
- --fields-optionally-enclosed-by
- --fields-terminated-by
- --flush-logs
- --flush-privileges
- --force
- --get-server-public-key
- --hex-blob
- --ignore-error
- --ignore-read-lock-error
- --ignore-table
- --insert-ignore
- --lines-terminated-by
- --lock-all-tables
- --lock-tables
- --max-allowed-packet
- --net-buffer-length
- --network-timeout
- --no-autocommit
- --no-create-db
- --no-create-info
- --no-data
- --no-defaults
- --no-set-names
- --no-tablespaces
- --opt
- --order-by-primary
- --pipe
- --quote-names
- --quick
- --replace
- --routines
- --secure-auth
- --set-charset
- --shared-memory-base-name
- --show-create-skip-secondary-engine
- --skip-opt
- --ssl-cipher
- --ssl-fips-mode
- --ssl-verify-server-cert
- --tls-ciphersuites
- --tls-version
- --triggers
- --tz-utc
- --verbose
- --xml
- --zstd-compression-level
הערכים המותרים מפורטים במסמכי התיעוד הציבוריים של MySQL.
מעקב אחרי ההעברה
אחרי שמתחילים את השכפול מהשרת החיצוני, צריך לעקוב אחרי השכפול. מידע נוסף זמין במאמר בנושא מעקב אחרי רפליקציה. אחרי הלחיצה אפשר להשלים את ההעברה.
פתרון בעיות
כדאי לנסות את האפשרויות הבאות לפתרון בעיות:
| שגיאה | פתרון בעיות |
|---|---|
| השכפול של העותק לקריאה לא התחיל בזמן היצירה. | סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן. בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל. |
| אי אפשר ליצור העתק לקריאה – השגיאה invalidFlagValue. | אחד מהדגלים בבקשה לא תקין. יכול להיות שזה דגל שציינתם באופן מפורש או דגל שהוגדר לו ערך ברירת מחדל.
קודם כול, בודקים שהערך של הדגל אם הדגל |
| לא ניתן ליצור רפליקה לקריאה – שגיאה לא ידועה. | סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן.
בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.
אם השגיאה היא: |
| הדיסק מלא. | יכול להיות שהגודל של הדיסק של המופע הראשי יתמלא במהלך יצירת רפליקה. עורכים את המופע הראשי כדי לשדרג אותו לגודל דיסק גדול יותר. |
| מופע הרפליקה משתמש ביותר מדי זיכרון. | הרפליקה משתמשת בזיכרון זמני כדי לשמור במטמון פעולות קריאה שמבוקשות לעיתים קרובות, מה שעלול לגרום לה להשתמש ביותר זיכרון מהמופע הראשי.
מפעילים מחדש את מופע הרפליקה כדי לפנות את המקום הזמני בזיכרון. |
| השכפול הופסק. | הגעתם למגבלת האחסון המקסימלית ולא הפעלתם את האפשרות להגדלת נפח האחסון באופן אוטומטי.
עורכים את המופע כדי להפעיל את |
| ההשהיה בשכפול גבוהה באופן עקבי. | עומס הכתיבה גבוה מדי בשביל הרפליקה. השהיית שכפול
מתרחשת כשהשרשור של SQL ברפליקה לא מצליח לעמוד בקצב של השרשור של IO. סוגים מסוימים של שאילתות או עומסי עבודה עלולים לגרום לעיכובים זמניים או קבועים בשכפול של סכימה נתונה. חלק מהסיבות הנפוצות להשהיה בשכפול:
הנה כמה פתרונות אפשריים:
|
| הפיגור בשכפול עולה בפתאומיות. | הסיבה לכך היא עסקאות שפועלות במשך זמן רב. כשמתבצעת פעולת אישור (commit) של טרנזקציה (דף חשבון יחיד או כמה דפי חשבון) במופע המקור, שעת ההתחלה של הטרנזקציה נרשמת ביומן הבינארי. כשעותק המשנה מקבל את אירוע ה-binlog הזה, הוא משווה את חותמת הזמן הזו לחותמת הזמן הנוכחית כדי לחשב את השהיית השכפול. לכן, טרנזקציה שפועלת לאורך זמן במקור תגרום להשהיה גדולה בשכפול ברפליקה. אם כמות השינויים בשורות בעסקה גדולה, ייקח הרבה זמן גם לרפליקה לבצע אותה. במהלך הזמן הזה,
ההשהיה בשכפול גדלה. אחרי שהרפליקה תסיים את העסקה הזו, משך תקופת ההשלמה יהיה תלוי בעומס העבודה של הכתיבה במקור ובמהירות העיבוד של הרפליקה.
כדי למנוע עסקאות ארוכות, אפשר לנסות את הפתרונות הבאים:
|
| שינוי של דגלים של רפליקציה מקבילה גורם לשגיאה. | הוגדר ערך שגוי לאחד או יותר מהסימונים האלה.
במופע הראשי שבו מוצגת הודעת השגיאה, מגדירים את דגלי השכפול המקבילי:
|
| יצירת רפליקה נכשלה בגלל זמן קצוב לתפוגה. | עסקאות ארוכות טווח שלא בוצעו במופע הראשי עלולות לגרום לכך שיצירת רפליקת קריאה תיכשל.
אחרי שמפסיקים את כל השאילתות הפעילות, יוצרים מחדש את העותק. |
בנוסף, אם אתם משתמשים ב-MySQL, כדאי לשקול גם את האפשרויות הבאות:
| שגיאה | פתרון בעיות |
|---|---|
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 במסוף Cloud de Confiance .
- בתפריט הנפתח Instance (מופע), בוחרים את הרפליקה של Cloud SQL.
- בוחרים את קובץ היומן
replication-setup.log.
אם הרפליקה של Cloud SQL לא מצליחה להתחבר לשרת החיצוני, צריך לוודא את הדברים הבאים:
- חומת אש בשרת החיצוני מוגדרת כך שהיא מאפשרת חיבורים מכתובת ה-IP היוצאת של העותק המשוכפל של Cloud SQL.
- הגדרת ה-SSL/TLS נכונה.
- המשתמש, המארח והסיסמה של השכפול נכונים.