מידע נוסף על רפליקציה זמין במאמר מידע על רפליקציה ב-Cloud SQL.
הגדרת התצורה של העותק החיצוני
לפני שמתחילים
לפני שמתחילים במשימה הזו, צריך לוודא שיש לכם מופע Cloud SQL ומופע חיצוני של MySQL שעומד בדרישות לשכפול חיצוני.
הדרישות לגבי מופע של מקור
מופע המקור של העתק לקריאה חיצוני חייב להיות מופע ראשי או מופע עצמאי. אי אפשר להשתמש בעותק לקריאה של Cloud SQL כמופע המקור לעותק חיצוני לקריאה. לפעמים, העתקים לקריאה נוצרים מחדש משיבוט הדיסק של המופע הראשי וממצב השכפול שלו, והעתק לקריאה לא יכול לשמור על מצב השכפול שלו.
הגדרת המכונה הראשית
- נכנסים לדף המכונות של Cloud SQL במסוף Cloud de Confiance .
- מאפשרים גישה במופע הראשי לכתובת ה-IP של העותק החיצוני.
מידע על הפעלת גישה לפי כתובת IP זמין במאמר הגדרת גישה לחיבורי IP.
- שומרים את כתובת ה-IP הציבורית ואת כתובת ה-IP הציבורית היוצאת של המכונה הראשית לשימוש בהמשך. הערכים האלה מופיעים בדף סקירה כללית של המופע.
- לוחצים על סמל Cloud Shell
בפינה השמאלית העליונה. - בשורת הפקודה של Cloud Shell, משתמשים בלקוח MySQL המובנה כדי להתחבר למכונה הראשית:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=root
- מזינים את סיסמת הבסיס. אחרי זה אמורה להופיע ההודעה של mysql.
- יוצרים משתמש מיוחד לשכפול ומעניקים לו הרשאות שכפול:
CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD'; GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
- אם מתחילים עם מסד נתונים חדש, צריך ליצור את אותו מסד נתונים ואת אותן טבלאות גם במופע הראשי וגם במופע המשוכפל. לדוגמה:
CREATE DATABASE test; USE test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- אם כבר יש לכם מסד נתונים במופע הראשי, אתם צריכים ליצור את אותו מסד נתונים בעותק המשוכפל. כדי לעשות את זה, מייצאים את מסד הנתונים מהמופע הראשי לקטגוריה של Cloud Storage ומייבאים אותו אל העותק המשוכפל. מידע נוסף על ייצוא נתונים מ-Cloud SQL לקובץ SQL מוכן לשימוש ב-Cloud Storage
הגדרת העותק החיצוני
אזהרה: התהליך הזה מחליף את כל הנתונים שמתארחים במסד נתונים של MySQL בעותק המשוכפל, כולל משתמשים וסיסמאות, בהגדרות ובנתונים מהמופע הראשי.-
במכונה שמארחת את העותק, מאכלסים את מופע ה-MySQL החיצוני החדש בקובץ הייצוא שיצרתם מהמופע הראשי.
לדוגמה, הפקודה הבאה טוענת קובץ מיוצא בשם
mydump.sql:mysql --user=root --password < mydump.sql
- קובעים את מזהה השרת של זוג העותק המשוכפל והשרת הראשי.
מזהה השרת הוא ערך מספרי (לדוגמה, '3') שצריך להיות ייחודי בהגדרת העותק החיצוני (לכל עותק צריך להיות מזהה שרת ייחודי).
- מוסיפים את האפשרויות הבאות לקובץ האפשרויות
my.cnfשל העותק:[mysqld] server-id=[SERVER_ID] gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON replicate-ignore-db=mysql binlog-format=ROW log_bin=mysql-bin expire_logs_days=1 read_only=ONמידע נוסף על אפשרויות הרפליקציה של MySQL זמין במאמרים Replication ו-Binary Logging Options.
- מפעילים מחדש את התהליך
mysqldכדי לקרוא את קובץ התצורה. - ב
mysqlלקוח של העותק המשוכפל, מזינים את הפקודה הבאה:CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER', MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
- מתחילים את השכפול בעותק המשוכפל:
START SLAVE;
מאשרים את סטטוס הרפליקציה:
SHOW SLAVE STATUS\G;
אם מופיעה ההודעה 'המתנה לשליחת אירוע מהשרת הראשי', המשמעות היא שהשכפול פועל.
הורדת הרמה של המופע הראשי של העתק חיצוני
אם יש לכם מופע Cloud SQL עם רפליקה חיצונית, אתם יכולים להפוך את ההגדרה. כתוצאה מכך יתרחשו השינויים הבאים:
- העותק החיצוני הופך למופע הראשי החדש.
- מכונת Cloud SQL הופכת לרפליקה לקריאה, שמשוכפלת מהשרת שהיה בעבר הרפליקה החיצונית (שנקרא עכשיו שרת מסד הנתונים של המקור).
כדי להפוך את ההגדרה של העותק המשוכפל החיצוני:
-
יוצרים מופע של ייצוג מקור.
המופע הזה ייצג את שרת מסד הנתונים של המקור בעותק המשוכפל של Cloud SQL אחרי שהפעולה של הורדת הרמה תושלם.
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "name": "SOURCE_REPRESENTATION_NAME", "region": "REGION", "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION", "onPremisesConfiguration": { "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT" } }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instancesמשתמשים באזור שבו רוצים שהרפליקה של Cloud SQL תהיה ממוקמת.
מתחילים בתהליך ההורדה בדרגה.
מכיוון שהקריאה הזו ל-API מחייבת לספק מידע רגיש, מומלץ להשתמש בקובץ JSON כדי לספק את הנתונים ל-cURL, במקום לספק אותם בשורת הפקודה.
יוצרים את קובץ הנתונים:
{ "demoteMasterContext": { "replicaConfiguration": { "mysqlReplicaConfiguration": { "username": "REPLICATION_USERNAME", "password": "PASSWORD", "caCertificate": "EXTERNAL_SERVER_CA", "clientCertificate": "CLIENT_CERT", "clientKey": "PRIVATE_KEY" } }, "masterInstanceName": "SOURCE_REPRESENTATION_NAME", }, }לאחר מכן, שולחים קריאה ל-API.
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @PATH_TO_DATA_FILE \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMasterמידע נוסף על האפשרויות של SSL/TLS זמין במאמר בנושא אפשרויות של SSL/TLS. מידע נוסף על המאפיינים שבהם נעשה שימוש באובייקט
replicaConfigurationזמין במאמר שכפול משרת חיצוני.-
ממתינים עד שכל העסקאות שממתינות לביצוע מהמופע הראשי יסתיימו בעותק המשוכפל החיצוני.
כשהרפליקה תתעדכן, הפקודה
SHOW SLAVE STATUSתציג את הערךSeconds Behind Masterכ-0, והערךExecuted_Gtid_Setיהיה זהה בין הרפליקה החיצונית לבין השרת הראשי של Cloud SQL. משתמשים בלקוח
mysqlכדי להפסיק את השכפול בעותק החיצוני:STOP SLAVE RESET SLAVE ALL
מחכים עד שהשכפול של מופע Cloud SQL יתחיל מהשרת החיצוני, שהוא עכשיו שרת מסד הנתונים של המקור.
הפעלת הפקודה
SHOW SLAVE STATUSבמכונה של Cloud SQL מספקת את סטטוס השכפול.-
אחרי שהשכפול ממסד הנתונים של השרת המקורי למכונה של Cloud SQL מסתיים בהצלחה, מגדירים את הדגל
read_onlyבשרת המקורי של מסד הנתונים לערךoffומעדכנים את האפליקציות כך שיצביעו על השרת המקורי של מסד הנתונים.
פתרון בעיות
| שגיאה | פתרון בעיות |
|---|---|
הודעת שגיאה: The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires. |
במופע הראשי של Cloud SQL יש גיבויים אוטומטיים ויומנים בינאריים, והופעלה האפשרות לשחזור מערכת מנקודה מסוימת בזמן (PITR), כך שצריכים להיות בו מספיק יומנים כדי שהרפליקה תוכל להתעדכן. עם זאת, במקרה הזה, למרות שקיימים יומני בינאריים, העותק לא יודע מאיזו שורה להתחיל לקרוא.
יוצרים קובץ dump חדש באמצעות הגדרות הדגל הנכונות, ומגדירים את העותק החיצוני באמצעות הקובץ הזה.
|