בדף הזה מוסבר איך להגדיר את השרת החיצוני לרפליקציה ל-Cloud SQL, ליצור מכונה של ייצוג מקור ב-Cloud SQL ולשכפל את הנתונים ל-Cloud SQL. צריך לבצע את כל השלבים בדף הזה לפני שממשיכים לשלבי השכפול.
חלופה לשלבים שמתוארים בדף הזה היא Database Migration Service, שמאפשר רפליקציה רציפה או העברה חד-פעמית של מסד נתונים משרת חיצוני ל-Cloud SQL.
לפני שמתחילים
לפני שמגדירים רפליקציה, חשוב לעיין בדרישות המוקדמות ובמונחים הבאים.
הסברים על המונחים
שרת חיצוני. שרת MySQL החיצוני ל-Cloud SQL שממנו רוצים לשכפל נתונים. הוא נקרא גם מסד הנתונים של המקור או שרת מסד הנתונים החיצוני. הוא יכול להיות מכונה אחרת של Cloud SQL או כל שרת אחר של מסד נתונים, כמו שרת מקומי או Amazon Relational Database Service (RDS).
מופע של ייצוג המקור. מוק של מכונת Cloud SQL שמייצג את השרת החיצוני לרפליקה של Cloud SQL. הוא מופיע במסוף Cloud de Confiance ונראה כמו מכונה רגילה של Cloud SQL, אבל הוא לא מכיל נתונים, לא דורש הגדרה או תחזוקה ולא משפיע על החיוב.
רפליקה של Cloud SQL. מכונת Cloud SQL שמשכפלת מהשרת החיצוני. נקראת גם "רפליקה חיצונית ראשית לקריאה בלבד".
חשבון משתמש לרפליקציה. חשבון המשתמש ב-MySQL בשרת החיצוני, עם הרשאות מספיקות כדי לאפשר רפליקציה בין השרת החיצוני לבין הרפליקה של Cloud SQL.
ייבוא מנוהל. תהליך הייבוא של נתונים ישירות מהשרת החיצוני לרפליקה של Cloud SQL. במצב כזה, Cloud SQL מתחבר לשרת החיצוני באמצעות חשבון המשתמש של הרפליקה, ומריץ את ה-dump של הנתונים ישירות בשרת החיצוני כדי לייבא נתונים לרפליקה של Cloud SQL.
הגדרת פרויקט ב- Cloud de Confiance
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Cloud SQL Admin API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
חשוב לוודא שבחשבון המשתמש שלכם מוגדרים התפקידים "אדמין של Cloud SQL", "אדמין של Storage" ו"צפייה ב-Compute".
התקנת ה-SDK של Cloud de Confiance
כדי להגדיר את הרפליקציה, מתקינים את ה-SDK של Cloud de Confiance בשרת החיצוני. אם ה-SDK לא מותקן במקום אחר, כדאי להתקין אותו בשרת החיצוני.
הגדרת השרת החיצוני לרפליקציה
רשימת משימות לשרת חיצוני
מוודאים שבשרת החיצוני מותקנת אחת מהגרסאות הבאות: MySQL 5.7, MySQL 8.0, MySQL 8.4 או MySQL 9.7. אפשר להשתמש ב-MySQL Community Edition, ב-Cloud SQL ל-MySQL, ב-Amazon Aurora, ב-MySQL ב-Amazon RDS וב-Microsoft Azure Database ל-MySQL Flexible Server.
- גרסת ה-MySQL הראשית ברפליקה של Cloud SQL צריכה להיות זהה לגרסת ה-MySQL שפועלת בשרת החיצוני, או גרסה חדשה יותר.
- אם בשרת החיצוני מותקנת גרסה 5.5 של MySQL, אין תמיכה ב-GTID.
מוודאים שהיומנים הבינאריים מופעלים וגם:
- רישום ביומן בינארי מבוסס-שורות.
- היומנים הבינאריים נשמרים למשך תקופה ארוכה מספיק כדי לתמוך בהעברת מסד הנתונים. בדרך כלל מספיק לחכות שבוע.
בודקים אם בשרת החיצוני מופעל GTID. זה משפיע על השלבים שצריך לבצע כדי להגדיר את הרפליקציה.
חשוב לבדוק אם לשרת החיצוני יש הרשאות גלובליות לנעילת קריאה. זה משפיע על השלבים שצריך לבצע כדי להגדיר את הרפליקציה.
אם הרפליקה של Cloud SQL מופעלת עם כתובת IP פרטית, כי כתובת ה-IP הפרטית היוצאת היא לא סטטית, צריך להגדיר את חומת האש של השרת החיצוני כך שתאפשר את טווח כתובות ה-IP הפנימיות שהוקצו לגישה לשירותים פרטיים של רשת ה-VPC שבה הרפליקה של Cloud SQL משתמשת כרשת הפרטית שלה.
חומת האש של שרת מסד הנתונים של המקור צריכה להיות מוגדרת כך שתאפשר את כל טווח כתובות ה-IP הפנימיות שהוקצה לחיבור לשירות הפרטי של רשת ה-VPC שבה משתמש מכון היעד של Cloud SQL, בתור השדה privateNetwork של הגדרות ה-ipConfiguration שלו.
כדי למצוא את טווח כתובות ה-IP הפנימיות:
במסוף Cloud de Confiance , נכנסים לדף רשתות VPC.
בוחרים את רשת ה-VPC שבה רוצים להשתמש.
לוחצים על הכרטיסייה Private service connection.
אם השרת החיצוני מכיל משפטי
DEFINER(תצוגות, אירועים, טריגרים או פרוצדורות מאוחסנות), יכול להיות שהשכפול ייכשל, בהתאם לסדר שבו המשפטים האלה מופעלים. מידע נוסף על השימוש ב-DEFINERועל פתרונות חלופיים אפשריים ב-Cloud SQLInnoDB הוא מנוע האחסון היחיד שנתמך ב-Cloud SQL. העברה באמצעות MyISAM עלולה לגרום לחוסר עקביות בנתונים, וצריך לאמת את הנתונים. למידע נוסף, קראו את המאמר Converting tables from MyISAM to InnoDB במסמכי התיעוד של MySQL.
הגדרת שמירה של יומנים בינאריים
צריך להגדיר את השרת החיצוני כך שישמור יומנים בינאריים למשך 24 שעות לפחות.
MySQL Community
אם השרת החיצוני משתמש ב-MySQL Community Edition, אתם יכולים להשתמש בפקודות הבאות של MySQL כדי לעדכן את הגדרות השמירה של היומן הבינארי.
MySQL 5.7:
expire_logs_daysMySQL 8.0.x:
expire_logs_days,binlog_expire_logs_secondsMySQL 8.4:
binlog_expire_logs_secondsMySQL 9.7:
binlog_expire_logs_seconds
Cloud SQL ל-MySQL
אם השרת החיצוני משתמש ב-Cloud SQL ל-MySQL, כברירת מחדל היומנים הבינאריים נשמרים למשך שבעה ימים. אתם יכולים לשנות את ההגדרה הזו.
Amazon RDS ו-Aurora
אם השרת החיצוני הוא מכונה של Amazon RDS, אתם יכולים להשתמש בפקודה הזו כדי לעדכן את הגדרות השמירה של היומן הבינארי:
call mysql.rds_set_configuration('binlog retention ', HOURS);
| מאפיין (property) | תיאור |
|---|---|
| שעות | מספר השעות הכולל של יומנים בינאריים שיישמרו במכונה של Amazon RDS. |
מידע נוסף זמין במאמר mysql.rds_set_configuration.
Microsoft Azure
כברירת מחדל, הרישום ביומן הבינארי מופעל. מידע נוסף זמין במאמרי העזרה של Microsoft.
מגדירים את
binlog_expire_logs_secondsלתקופה ארוכה מספיק כדי לתמוך בהעברת מסד הנתונים.מידע נוסף זמין במאמר הגדרת פרמטרים של שרת במסד נתונים של Azure ל-MySQL ובפרמטר
binlog_expire_logs_secondsבמאמרי העזרה של Microsoft.מפעילים מחדש את השרת כדי שהשינויים שביצעתם ייכנסו לתוקף.
יצירת חשבון משתמש לרפליקציה
בשרת החיצוני צריך להיות חשבון משתמש של MySQL שמיועד לניהול הרפליקציה לרפליקה של Cloud SQL. חשבון המשתמש הזה צריך לשמש רק לניהול הרפליקציה. בהתאם לגישת ההעברה שבה אתם משתמשים, יכול להיות שתצטרכו לתת הרשאות למשתמש בשלב מאוחר יותר.
כדי להוסיף חשבון משתמש לרפליקציה, פותחים טרמינל בשרת החיצוני ומזינים את הפקודות הבאות של MySQL:
MySQL
CREATE USER 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD'; GRANT SELECT, SHOW VIEW ON *.* TO 'USERNAME'@'HOST'; FLUSH PRIVILEGES;
לדוגמה
CREATE USER 'replicationUser'@'%' IDENTIFIED BY '8*&fwwd';
GRANT SELECT, SHOW VIEW ON *.* TO 'replicationUser'@'%';
FLUSH PRIVILEGES;
| מאפיין (property) | תיאור |
|---|---|
| USERNAME | חשבון המשתמש של הרפליקציה בשרת החיצוני. |
| PASSWORD | הסיסמה לחשבון המשתמש של הרפליקציה. |
| HOST | צריך להגדיר את הערך % כדי לאשר את כל החיבורים מכל מארח.
בשלב מאוחר יותר, נשנה את ההגדרה כך שהשרת יקבל רק חיבורים מהרפליקה של Cloud SQL. |
הגדרה של מופע ייצוג של מקור
מופע הייצוג של המקור מפנה לשרת החיצוני. הוא מכיל רק את נתוני הבקשה מהשרת החיצוני. יוצרים את נתוני הבקשה ומשתמשים בהם בפקודה curl שיוצרת את המכונה שמייצגת את המקור ב-Cloud SQL.
יצירת נתוני הבקשה
נתוני הבקשה מכילים מידע בסיסי על השרת החיצוני בפורמט JSON. אפשר להגדיר את נתוני הבקשה לרפליקה של Cloud SQL ברשת ציבורית או פרטית, והם צריכים להכיל את המידע הבא.
אם רוצים להעביר קבוצת משנה של מסדי נתונים ממכונת הייצוג של המקור למכונת Cloud SQL של היעד, משתמשים בפרמטר selectedObjects כדי לציין את שמות מסדי הנתונים. אם לא משתמשים בפרמטר הזה או מספקים רשימה ריקה כערך של הפרמטר, כל מסדי הנתונים מועברים מהמקור ליעד.
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "hostPort": "SOURCE_HOST", "username": "USERNAME", "password": "PASSWORD", "caCertificate": "SOURCE_CERT", "clientCertificate": "CLIENT_CERT", "clientKey": "CLIENT_KEY" } }
דוגמה לייבוא מנוהל
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db2"}],
"hostPort": "192.0.2.0:3306",
"username": "replicationUser",
"password": "486#@%*@"
}
}
דוגמה לקובץ dump
// example of source.json for external server that
// - initiates replication from a file
// - uses SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"hostPort": "192.0.2.0:3306",
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "replicationUser",
"password": "486#@%*@",
"dumpFilePath": "gs://replica-bucket/source-database.sql.gz",
"caCertificate": "content of your certificate",
"clientCertificate": "content of your certificate",
"clientKey": "content of your client key",
"sslOption": "REQUIRE"
}
}
דוגמה לייבוא בהתאמה אישית
// example of source.json for external server that
// - initiates replication from a Cloud SQL custom import
// - uses SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"hostPort": "192.0.2.0:3306",
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "replicationUser",
"password": "486#@%*@",
"sslOption": "REQUIRE"
}
}
| מאפיין (property) | תיאור |
|---|---|
| SOURCE_NAME | השם של מופע הייצוג של המקור שרוצים ליצור. |
| REGION | האזור שבו רוצים למקם את המכונה של הייצוג של המקור. |
| DATABASE_VERSION | גרסת מסד הנתונים שפועלת בשרת החיצוני. האפשרויות הן MYSQL_5_7, MYSQL_8_0, MYSQL_8_4 או MYSQL_9_7. |
| SELECTED_OBJECTS | רשימה מופרדת בפסיקים של אובייקטים, שמכילה את מסדי הנתונים שאתם מעבירים ממכונת הייצוג של המקור למכונת Cloud SQL של היעד. |
| SOURCE HOST | כתובת ה-IPv4 והיציאה של השרת החיצוני, או כתובת ה-DNS של השרת החיצוני. אם משתמשים בכתובת DNS, היא יכולה להכיל עד 60 תווים. אם השרת החיצוני מתארח ב-Cloud SQL, היציאה היא 3306 . |
| USERNAME | חשבון המשתמש של הרפליקציה בשרת החיצוני. |
| PASSWORD | הסיסמה לחשבון המשתמש של הרפליקציה. |
| BUCKET | שם הקטגוריה שמכילה את קובץ ה-dump. צריך לכלול את השדה הזה רק אם מגדירים רפליקציה עם קובץ dump שקיים בקטגוריה של Cloud Storage. |
| DUMP_FILE | קובץ בקטגוריה שמכיל את הנתונים מהשרת החיצוני. |
| CLIENT_CA_CERT | אישור ה-CA בשרת החיצוני. צריך לכלול את זה רק אם משתמשים ב-SSL/TLS בשרת החיצוני. |
| CLIENT_CERT | אישור הלקוח בשרת החיצוני. נדרש רק לאימות שרת-לקוח. צריך לכלול את זה רק אם משתמשים ב-SSL או ב-TLS בשרת החיצוני. |
| CLIENT_KEY | קובץ המפתח הפרטי של אישור הלקוח בשרת החיצוני. נדרש רק לאימות שרת-לקוח. צריך לכלול את זה רק אם משתמשים ב-SSL או ב-TLS בשרת החיצוני. |
| SSL_OPTION | אם נעשה שימוש בהצפנת SSL/TLS כדי ליצור חיבור בין מסד הנתונים של Microsoft Azure במקור לבין מסד הנתונים של Cloud SQL ביעד. אפשר לציין את הערכים הבאים בפרמטר הזה:
ערך ברירת המחדל של הפרמטר הזה הוא |
יצירת מופע של ייצוג מקור
לפני שמתחילים את השלב הזה, יוצרים קובץ JSON שמכיל את נתוני הבקשה של המקור.
כדי ליצור את המכונה שמייצגת את המקור ב-Cloud SQL, פותחים טרמינל ומריצים את הפקודות הבאות:
curl
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 POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
לדוגמה
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 POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
| מאפיין (property) | תיאור |
|---|---|
| PROJECT_ID | המזהה של הפרויקט ב- Cloud de Confiance. |
| JSON_PATH | הנתיב לקובץ JSON שמכיל את נתוני הבקשה לשרת החיצוני. |
עדכון של מופע ייצוג של מקור
אם מעדכנים את נתוני הבקשה מהשרת החיצוני, אפשר לעדכן את המופע הקיים של ייצוג המקור כדי להשתמש בערכים ששונו.
שינוי נתוני הבקשה
מעדכנים את נתוני הבקשה כך שיכללו את כל השדות שהשתנו. השדות האלה כוללים את hostPort, username, password, caCertificate, clientCertificate ו-clientKey. אחרי שמעדכנים את נתוני הבקשה, משתמשים בהם בפקודה curl כדי לעדכן את המכונה ב-Cloud SQL.
כדי לעדכן את מסדי הנתונים שרוצים להעביר ממכונת הייצוג של המקור, מעדכנים את רשימת השמות של מסדי הנתונים שמשויכים לפרמטר selectedObjects. אם לא משתמשים בפרמטר הזה או מספקים רשימה ריקה כערך של הפרמטר, כל מסדי הנתונים מועברים מהמקור ליעד.
בדוגמה הבאה מוצג עדכון של השדות username ו-password עם שם משתמש וסיסמה שונים:
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "username": "NEW_USERNAME", "password": "NEW_PASSWORD" } }
דוגמה לייבוא מנוהל
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "newReplicationUser",
"password": "525#@%*@"
}
}
דוגמה לקובץ dump
// example of source.json for external server that
// - initiates replication from a file
// - uses SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "newReplicationUser",
"password": "486#@%*@"
}
}
דוגמה לייבוא בהתאמה אישית
// example of source.json for external server that
// - initiates replication from a Cloud SQL custom import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "MYSQL_5_7",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "newReplicationUser",
"password": "486#@%*@"
}
}
| מאפיין (property) | תיאור |
|---|---|
| SOURCE_NAME | השם של מופע הייצוג של המקור. |
| REGION | האזור שבו נמצא המופע של הייצוג של המקור. |
| DATABASE_VERSION | גרסת מסד הנתונים שפועלת בשרת החיצוני. האפשרויות הן MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4 או MYSQL_9_7.
|
| SELECTED_OBJECTS | רשימה מעודכנת של אובייקטים מופרדים בפסיקים, שמכילה מסדי נתונים שאתם מעבירים ממכונת הייצוג של המקור למכונה של Cloud SQL ביעד. |
| NEW_USERNAME | חשבון המשתמש החדש לשכפול בשרת החיצוני. |
| NEW_PASSWORD | הסיסמה לחשבון החדש. |
שינוי מופע של ייצוג מקור
לפני שמתחילים את השלב הזה, יוצרים קובץ JSON שמכיל את נתוני הבקשה שרוצים לשנות.
כדי לשנות את המכונה שמייצגת את המקור ב-Cloud SQL, פותחים טרמינל ומריצים את הפקודות הבאות:
curl
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_NAME
לדוגמה
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) | תיאור |
|---|---|
| PROJECT_ID | המזהה של הפרויקט ב- Cloud de Confiance. |
| JSON_PATH | הנתיב לקובץ JSON שמכיל את נתוני הבקשה לשרת החיצוני. |
| SOURCE_NAME | השם של מופע הייצוג של המקור. |
הגדרת רפליקה של Cloud SQL
בסופו של דבר, הרפליקה של Cloud SQL מכילה את הנתונים מהשרת החיצוני. בשלב הזה יוצרים את נתוני הבקשה ומשתמשים בהם בפקודת curl שיוצרת את הרפליקה של Cloud SQL ב-Cloud SQL.
יצירת נתוני הבקשה
נתוני הבקשה מכילים מידע בסיסי על השרת החיצוני ועל הרפליקה של Cloud SQL בפורמט JSON. אפשר להגדיר את נתוני הבקשה לרפליקה של Cloud SQL ברשת ציבורית או פרטית, והם צריכים להכיל את המידע הבא:
replica.json
{ "settings": { "tier": "TIER", "dataDiskSizeGb": "DISK_SIZE", "ipConfiguration": { "ipv4Enabled": "PUBLIC_IP_STATUS", "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME" }, "availabilityType": "AVAILABILITY_TYPE" }, "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME", "region": "SOURCE_REGION", "databaseVersion": "DATABASE_VERSION", "name": "REPLICA_NAME" }
לדוגמה
{ "settings": { "tier": "db-custom-4-15360", "dataDiskSizeGb": "100" }, "masterInstanceName": "source-instance", "region": "us-central1", "databaseVersion": "MYSQL_8_0", "name": "replica-instance" }
| מאפיין (property) | תיאור |
|---|---|
| TIER | סוג המכונה לאירוח של מכונת הרפליקה. אם אתם לא יודעים באיזה סוג מכונה להשתמש, התחילו עם db-custom-2-7680. אם צריך, אפשר לשנות את הגודל שלו וערכים נתמכים אחרים בהמשך. |
| DISK_SIZE | נפח האחסון של הרפליקה ב-Cloud SQL, ב-GB. |
| PUBLIC_IP_STATUS | ההגדרה קובעת אם למכונה מוקצית כתובת IP ציבורית. ערך ברירת המחדל של המאפיין הזה הוא true.
כדי להשבית את ההקצאה של כתובת IP ציבורית לרפליקה, מגדירים את הערך false.
אם בפרויקט מופעלת מדיניות הארגון constraints/sql.restrictPublicIp, כדי ליצור את הרפליקה של Cloud SQL צריך להגדיר את הערך של המאפיין ipv4Enabled ל-false. מידע נוסף על השבתת ההקצאה של כתובות IP ציבוריות זמין במאמר השבתה של כתובת IP ציבורית. |
| PROJECT_ID | אם הרפליקה של Cloud SQL נמצאת ברשת פרטית, צריך לכלול את המאפיין privateNetwork בקובץ replica.json.
בשדה PROJECT_ID, מציינים את מזהה הפרויקט ב- Cloud de Confiance. |
| NETWORK_NAME | שם הרשת הפרטית שבה משתמשים עם הרפליקה של Cloud SQL. |
| AVAILABILITY_TYPE | סוג הזמינות של הרפליקה ב-Cloud SQL. ערך ברירת המחדל הוא ZONAL. כדי להגדיר את הרפליקה כ-HA, מגדירים את הערך ל-REGIONAL. כדי לראות את הערכים המותרים, עיינו ב-SqlAvailabilityType.
אחרי שיוצרים רפליקת HA של שרת חיצוני, אי אפשר לשנות אותה לרפליקה שהיא לא HA. זה נכון גם בכיוון ההפוך. אי אפשר לשנות רפליקה ללא זמינות גבוהה של שרת חיצוני לרפליקה עם זמינות גבוהה. אם מנסים לבצע מעבר ידני לגיבוי בזמן שהמכונה עדיין טוענת את הנתונים הראשוניים, יכול להיות שההעברה לא תהיה ניתנת לשחזור. אם המכונה כבר משכפלת מהמקור, יכול להיות שיהיה זמן השבתה זמני. בודקים את סטטוס הרפליקציה. |
| SOURCE_REPRESENTATION_INSTANCE_NAME | השם של מופע הייצוג של המקור. |
| SOURCE_REGION | האזור שהוקצה למופע של ייצוג המקור. |
| DATABASE_VERSION | גרסת מסד הנתונים שבה משתמשים ברפליקה של Cloud SQL. האפשרויות לגרסה הזו הן MYSQL_5_6, MYSQL_5_7, MYSQL_8_0, MYSQL_8_4 או MYSQL_9_7.
הגרסה צריכה להתאים לגרסת מסד הנתונים שפועלת בשרת החיצוני, או להיות גרסה אחת מאוחרת יותר לכל היותר. |
| REPLICA_NAME | השם של הרפליקה של Cloud SQL שרוצים ליצור. |
יצירת הרפליקה של Cloud SQL
לפני שמתחילים את השלב הזה, יוצרים קובץ JSON שמכיל את נתוני הבקשה לרפליקה. כדי ליצור רפליקה של Cloud SQL, פותחים טרמינל של 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 @JSON_PATH \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
לדוגמה
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @./replica.json \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
| מאפיין (property) | תיאור |
|---|---|
| PROJECT_ID | מזהה הפרויקט ב- Cloud de Confiance, שצריך להיות זהה לזה של מכונת המקור. |
| JSON_PATH | הנתיב לקובץ JSON שמכיל את נתוני הבקשה של הרפליקה של Cloud SQL. |
אימות ההגדרה
כדי לוודא שהמכונות הוגדרו בצורה נכונה, נכנסים לדף Cloud SQL Instances.
אמורים לראות את המכונה שמייצגת את המקור ואת הרפליקה של Cloud SQL, ברשימה שדומה לזו:
| מזהה מופע | סוג | כתובת IP ציבורית |
|---|---|---|
| (-) source-representation-instance | מסד נתונים ראשי חיצוני | 10.68.48.3:3306 |
| replica-instance | רפליקה לקריאה של מסד נתונים | 34.66.48.59 |
חשוב גם לוודא שיש לכם את ההרשאה cloudsql.instances.migrate ברפליקה של Cloud SQL. ההרשאה הזו כלולה בתפקידי ה-IAM cloudsql.admin או cloudsql.editor.
הגדרת סיסמת ברירת המחדל של המשתמש והוספת חשבונות משתמשים אחרים לרפליקה של Cloud SQL
אחרי שיוצרים את הרפליקה של Cloud SQL, מגדירים את הסיסמה למשתמש ברירת המחדל. אם צריך, אפשר גם להוסיף עוד חשבונות משתמשים לרפליקה. אי אפשר לייבא חשבונות משתמשים של מסד נתונים מהשרת החיצוני, אבל אפשר ליצור מחדש את חשבונות המשתמשים ברפליקה של Cloud SQL. בצעו את הפעולות האלה לפני שאתם משכפלים מהשרת החיצוני.
כדי להגדיר את הסיסמה למשתמש ברירת המחדל, משתמשים בפקודה gcloud sql users set-password באופן הבא:
gcloud sql users set-password root \ --host=% \ --instance=INSTANCE_NAME \ --password=PASSWORD
לפני שמריצים את הפקודה, מחליפים את INSTANCE_NAME בשם המכונה ואת PASSWORD בסיסמה שבחרתם.
כדי ליצור חשבונות משתמשים ברפליקה, קראו את המאמר ניהול משתמשים באמצעות אימות מובנה.איך מוצאים את כתובת ה-IP היוצאת של הרפליקה ב-Cloud SQL
אתם יכולים להשתמש בכתובת ה-IP היוצאת של הרפליקה של Cloud SQL כדי ליצור חיבור מאובטח בין השרת החיצוני לבין הרפליקה של Cloud SQL. לא תחויבו על כתובת ה-IP הזו.
המסוף
כדי לקבל את כתובת ה-IP היוצאת של הרפליקה:
-
נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .
ליד כתובת ה-IP הציבורית של הרפליקה של Cloud SQL, מעבירים את הסמן מעל ההסבר הקצר More info ומאחזרים את כתובת ה-IP היוצאת.
חשוב לזכור שכתובת ה-IP היוצאת היא לא כתובת ה-IP שמוצגת ברשימה הראשית של הרפליקה במסוף Cloud de Confiance .
gcloud
כדי לקבל את כתובת ה-IP היוצאת של הרפליקה, מריצים את הפקודה הבאה:
gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
| מאפיין (property) | תיאור |
|---|---|
| REPLICA_NAME | שם הרפליקה של Cloud SQL שאת כתובת ה-IP הציבורית היוצאת שלה רוצים לאחזר. |
אישור חיבורים נכנסים בשרת החיצוני
כדי שהרפליקציה תצליח, הרפליקה של Cloud SQL צריכה להתחבר לשרת החיצוני. אם התנאים הבאים מתקיימים, צריך להגדיר את חומת האש של הרשת של השרת החיצוני כך שתקבל חיבורים מכתובת ה-IP היוצאת של הרפליקה של Cloud SQL:
- השרת החיצוני נמצא מאחורי חומת אש או מגבלת רשת אחרת.
- הרפליקה של Cloud SQL משתמשת בכתובת IP ציבורית.
כדי להתחבר לרפליקה של Cloud SQL, משתמשים בכתובת ה-IP הראשית של הרפליקה. כתובת ה-IP הזו מוצגת במסוף Cloud de Confiance .
עדכון המכונה שמייצגת את המקור כדי לאפשר רפליקציה לרפליקה של Cloud SQL
אחרי שמגדירים את מכונת הייצוג של המקור לרפליקה של Cloud SQL, יכול להיות שצריך לעדכן את מכונת הייצוג של המקור. לדוגמה, צריך לעדכן את ההגדרות במקרים הבאים:
- המארח, היציאה או כתובת ה-IP של השרת החיצוני משתנים.
- אתם רוצים להשתמש במשתמש אחר לרפליקציה של MySQL.
- הסיסמה של משתמש הרפליקציה של MySQL משתנה.
- אישורי ה-SSL שמשמשים לחיבור מאובטח לשרת החיצוני משתנים.
הזנת נתונים לרפליקה של Cloud SQL
יש שלוש אפשרויות לביצוע הטעינה הראשונית של הנתונים מהשרת החיצוני לרפליקה של Cloud SQL:
- בייבוא מנוהל נעשה שימוש בשירות שמחלץ נתונים מהשרת החיצוני ומייבא אותם ישירות למכונה של Cloud SQL. אנחנו ממליצים על האפשרות הזו ב-Cloud SQL. אתם חייבים להשתמש באפשרות הזו אם השרת החיצוני שלכם לא משתמש ברפליקציה של מזהה עסקה גלובלי (GTID). מידע נוסף זמין במאמר שימוש בייבוא מנוהל כדי להגדיר שכפול ממסדי נתונים חיצוניים.
- כדי להשתמש בקובץ dump, צריך ליצור קובץ dump של השרת החיצוני, להעביר אותו לקטגוריה של Cloud Storage ולייבא אותו ל-Cloud SQL. אפשר להשתמש באפשרות הזו רק אם השרת החיצוני משתמש ברפליקציית GTID. מידע נוסף זמין במאמר שימוש בקובץ dump להגדרת שכפול ממסדי נתונים חיצוניים.
- כדי לייבא בהתאמה אישית, צריך ליצור מכונה ראשית של Cloud SQL, לייבא נתונים בהתאמה אישית באמצעות הכלים המועדפים עליכם, להוריד אותה בדרגה לרפליקה של Cloud SQL ואז להגדיר רפליקה של שרת חיצוני. השיטה הזו מתאימה במיוחד להעברת מסדי נתונים בגודל של כמה טרה-בייטים, אבל צריך להשתמש ברפליקציית GTID. מידע נוסף זמין במאמר שימוש בייבוא בהתאמה אישית כדי להגדיר שכפול ממסדי נתונים חיצוניים גדולים.
איזו אפשרות מתאימה לכם?
מעקב אחרי הרפליקציה
כשהרפליקה של Cloud SQL מסיימת את טעינת הנתונים הראשונית, היא מתחברת לשרת החיצוני ומחילה את כל העדכונים שבוצעו אחרי פעולת הייצוא. איך בודקים את סטטוס הרפליקציה
חשוב לבדוק את סטטוס הרפליקציה לפני שמקדמים את הרפליקה למכונה עצמאית. אם תהליך השכפול לא הושלם, הרפליקה שקודמה לא תכלול את כל השינויים מהשרת החיצוני.
אם עיכוב השכפול לא מתקרב ל-0, צריך לטפל בבעיה.
אם אתם רוצים להעביר קבוצת משנה של מסדי נתונים ממכונת הייצוג של המקור למכונת Cloud SQL של היעד, בדקו את המדדים הבאים לכל מסד נתונים:
| מדד | תיאור |
|---|---|
database/mysql/external_sync/replica_lag |
המדד הזה עוזר להחליט מתי לקדם את מכונת הרפליקה של השרת החיצוני. המדד הזה מסנן את מסדי הנתונים שלא נבחרו להעברה, ומדווח על השהיית הרפליקציה של מסדי הנתונים שנבחרו להעברה. |
אחרי שהרפליקה של Cloud SQL תתעדכן בהתאם לשרת החיצוני ולא יהיה עיכוב ברפליקה של Cloud SQL, מתחברים למסד הנתונים. מריצים את פקודות מסד הנתונים המתאימות כדי לוודא שהתוכן תואם למה שמופיע בשרת החיצוני. שמרו את השרת החיצוני עד לסיום האימותים הנדרשים.
דילוג על שגיאות ברפליקציה
במהלך שכפול של שרת חיצוני, יכול להיות שתיתקלו בשגיאות שתרצו לדלג עליהן כדי להמשיך בשכפול. כדי לבדוק אם נתקלתם בשגיאת שכפול, הריצו את אחת מהפקודות הבאות.
ב-MySQL מגרסה 8.0.25 ומטה:
SHOW SLAVE STATUS;
ב-MySQL מגרסה 8.0.26 ואילך:
SHOW REPLICA STATUS;
יכול להיות שתיתקלו בשגיאות הבאות במהלך שכפול של שרת חיצוני:
- שגיאות של מפתחות כפולים יכולות להתרחש כשמוסיפים שורה ומעבירים מערך נתונים ל-Cloud SQL ל-MySQL ממסד נתונים מקומי שכולל טבלאות MyISAM. במקרים נדירים, יכול להיות שיש באג ב-InnoDB.
- חוסר תאימות יכול להתרחש כשמשכפלים הצהרות מסוימות מגרסה קודמת של מכונה ראשית לגרסה מאוחרת יותר של מכונת רפליקה. בדרך כלל, ההנחה היא שכל הצהרת MySQL במכונה ראשית שנמצאת בגרסה ראשית אחת לפני רפליקת היעד, יכולה להיות מופעלת מחדש על ידי הרפליקה.
חוסר תאימות יכול להתרחש כשמעבירים מגרסת MySQL אחרת, שיש לה כללים שונים במקצת לתמיכה במסד נתונים. לדוגמה:
- ב-Microsoft Azure MySQL יש את ההצהרה
FLUSH FIREWALL RULES. - בשרת MariaDB יש את ההצהרה
FLUSH USER_STATISTICS. - Percona ל-MySQL מאפשר ל-DDL להוסיף עמודת
DATETIMEעם ערך ברירת מחדל של אפס (לדוגמה,1970-01-01 00:00:00), וזה לא תקין ב-MySQL.
- ב-Microsoft Azure MySQL יש את ההצהרה
מנגנון אחד לדילוג על שגיאות הוא להגדיר את דגל ההגדרות האישיות slave_skip_errors או replica_skip_errors כדי לדלג על קוד השגיאה האחרון שנתקלתם בו.
כדי למצוא את קוד השגיאה האחרון, שולחים שאילתה לעמודה LAST_ERROR_NUMBER בטבלה performance_schema.replication_applier_status_by_worker.
שינוי הדגל הזה מדלג על כל שגיאות השכפול עם קוד השגיאה או הקודים הרלוונטיים.
אם נתקלתם בשגיאה אחת, אתם יכולים לדלג עליה ולהמשיך את הרפליקציה של השרת החיצוני באמצעות הפעלת הפרוצדורה המאוחסנת mysql.skipReplicationError() ש-Cloud SQL מספק.
הגדרה של רפליקה מדורגת
אחרי ההעברה, אתם יכולים ליצור רפליקות לקריאה מדורגות מתחת לרפליקה של Cloud SQL, לפני שאתם מקדמים את הרפליקה של Cloud SQL.
אפשר ליצור רפליקות מדורגות למכונה של Cloud SQL רק אם משתמשים ברפליקציית GTID.כדי ליצור רפליקה מדורגת, מריצים את הפקודות הבאות:
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .
- ב-MySQL מגרסה 5.7 ואילך, מפעילים את הרפליקציה.
- בכרטיסייה Replicas, לוחצים על הרפליקה שתשמש כהורה לרפליקה שרוצים ליצור.
- לוחצים על Create replica.
- בדף Create read replica, מעדכנים את מזהה המכונה ואת כל אפשרויות ההגדרה האחרות, כולל השם, האזור והתחום.
- לוחצים על יצירה.
מערכת Cloud SQL יוצרת רפליקה. המערכת תחזיר אתכם לדף המכונה של הרפליקה הראשית.
- חוזרים על שלבים 4 עד 6 לכל רפליקה מדורגת חדשה שרוצים ליצור.
gcloud
- אם משתמשים ב-MySQL בגרסה 5.7 ואילך, מפעילים את יומני ה-binlog של המכונה הראשית של הרפליקה החדשה:
מחליפים את PARENT_REPLICA_NAME בשם של הרפליקה הראשית.gcloud sql instances patch --enable-bin-log --project=cascade-replica PARENT_REPLICA_NAME
- יוצרים את הרפליקה החדשה על ידי ציון הרפליקה של Cloud SQL כמכונה הראשית באמצעות הדגל
--master-instance-name: מחליפים את הערכים הבאים:gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
- REPLICA_NAME: המזהה הייחודי של הרפליקה שיוצרים
- PARENT_REPLICA_NAME: השם של הרפליקה של Cloud SQL
אחרי שיוצרים את הרפליקה, אפשר לראות שהשינויים שבוצעו במכונה הראשית משוכפלים בכל הרפליקות בשרשרת הרפליקות המדורגות.
curl
- אם אתם משתמשים ב-MySQL בגרסה 5.7 ואילך, הפעילו את הרישום ביומן הבינארי:
כדי להפעיל את הרישום ביומן הבינארי, שמרו את ה-JSON הבא בקובץ בשם request.JSON, ואז הפעילו את הפקודה curl כדי להפעיל את הרישום ביומן הבינארי.
{ "settings": { "backupConfiguration": { "enabled": false, "binaryLogEnabled": true } } }
- כדי ליצור רפליקה מתחת לרפליקת ההורה, עורכים את דוגמת הקוד הבאה ב-JSON ושומרים אותה בקובץ בשם
request.json:{ "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- מריצים את הפקודה הבאה:
curl -X POST -H "Authorization: Bearer "$(gcloud auth print-access-token) -H "Content-Type: application/json; charset=utf-8" -d @request.json "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"
קידום הרפליקה
כדי לקדם את הרפליקה:
- קידום הרפליקה למכונה ראשית. שימו לב שיומני GTID ויומנים בינאריים מופעלים, ושהגיבויים המתוזמנים מופעלים ברפליקה שקודמה.
- הוספת רפליקות לקריאה למכונה.
- אופציונלי: מגדירים את המכונה לזמינות גבוהה (HA).
כדי למנוע זמן השבתה נוסף, אתם יכולים להפעיל זמינות גבוהה בזמן הגדרת רפליקה על ידי הגדרת
AVAILABILITY_TYPEל-REGIONAL.
מגבלות
אם בוחרים מסד נתונים להעברה, מבצעים העברה ואחר כך מסירים את מסד הנתונים מרשימת מסדי הנתונים שנבחרו, התוכן של מסד הנתונים שהועבר נשאר ביעד, אלא אם מוחקים אותו באופן מפורש.
אם תנסו להעביר מסד נתונים ספציפי שתלוי בנתונים במסד נתונים אחר שלא מועבר, יכול להיות שההעברה של מסד הנתונים שבחרתם תיכשל. למידע נוסף על השגיאות שאתם עשויים להיתקל בהן, ראו פתרון בעיות.
אם אתם מעבירים מסדי נתונים נבחרים, אתם לא יכולים להשתמש בהצהרות של שפת הגדרת נתונים (DDL) בשביל שגרות או אירועים של מסד נתונים כלשהו, בלי קשר ליחסי תלות או לבחירה שלכם במסד הנתונים להעברה.
אי אפשר לציין להעברה מסדי נתונים נבחרים ששמות מסדי הנתונים שלהם מכילים את התווים המילוליים
_(קווים תחתונים (U+005F)),%(סימני אחוז (U+0025)) או,(פסיקים (U+002C)).