מידע נוסף על רפליקציה זמין במאמר מידע על רפליקציה ב-Cloud SQL.
הגדרת התצורה של הרפליקה החיצונית
לפני שמתחילים
לפני שמתחילים במשימה הזו, צריך לוודא שיש לכם מופע Cloud SQL ומופע MySQL חיצוני שעומדים בדרישות לשכפול חיצוני.
הדרישות לגבי מופעים של מקורות
מופע המקור של העתק לקריאה חיצוני חייב להיות מופע ראשי או מופע עצמאי. אי אפשר להשתמש בעותק לקריאה ב-Cloud SQL בתור מופע המקור של עותק חיצוני לקריאה. לפעמים משכפלים רפליקות לקריאה מחדש מהשיבוט של הדיסק של המופע הראשי שלהם, ומצב הרפליקציה שלהם לא יכול להישמר על ידי הרפליקה לקריאה.
הגדרת המכונה הראשית
- נכנסים לדף המכונות של Cloud SQL במסוף Google Cloud .
- הפעלת הגישה במופע הראשי לכתובת ה-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 ברפליקה, כולל משתמשים וסיסמאות, בהגדרות ובנתונים מהמופע הראשי.-
במכונה שמארחת את הרפליקה, יוצרים seed למכונת 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 and 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 חדש באמצעות הגדרות הדגל הנכונות, ומגדירים את הרפליקה החיצונית באמצעות הקובץ הזה.
|
המאמרים הבאים
- איך מנהלים רפליקות
- מידע נוסף על רפליקציה ב-Cloud SQL
- מידע נוסף על שכפול של MySQL
- מידע נוסף על אפשרויות השכפול
- מידע נוסף על בדיקת סטטוס הרפליקציה
- מידע נוסף על שכפול משרת חיצוני