הגדרת Cloud SQL והשרת החיצוני לשכפול

בדף הזה מוסבר איך להגדיר את השרת החיצוני לרפליקציה ל-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

  1. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. 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.enable permission. 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.

    Enable the API

  4. חשוב לוודא שבחשבון המשתמש שלכם מוגדרים התפקידים "אדמין של Cloud SQL", "אדמין של Storage" ו"צפייה ב-Compute".

    כניסה לדף IAM

התקנת ה-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 הפנימיות:

    1. במסוף Cloud de Confiance , נכנסים לדף רשתות VPC.

      כניסה לדף VPC networks

    2. בוחרים את רשת ה-VPC שבה רוצים להשתמש.

    3. לוחצים על הכרטיסייה Private service connection.

  • אם השרת החיצוני מכיל משפטי DEFINER (תצוגות, אירועים, טריגרים או פרוצדורות מאוחסנות), יכול להיות שהשכפול ייכשל, בהתאם לסדר שבו המשפטים האלה מופעלים. מידע נוסף על השימוש ב-DEFINER ועל פתרונות חלופיים אפשריים ב-Cloud SQL

  • ‫InnoDB הוא מנוע האחסון היחיד שנתמך ב-Cloud SQL. העברה באמצעות MyISAM עלולה לגרום לחוסר עקביות בנתונים, וצריך לאמת את הנתונים. למידע נוסף, קראו את המאמר Converting tables from MyISAM to InnoDB במסמכי התיעוד של MySQL.

הגדרת שמירה של יומנים בינאריים

צריך להגדיר את השרת החיצוני כך שישמור יומנים בינאריים למשך 24 שעות לפחות.

MySQL Community

אם השרת החיצוני משתמש ב-MySQL Community Edition, אתם יכולים להשתמש בפקודות הבאות של MySQL כדי לעדכן את הגדרות השמירה של היומן הבינארי.

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.

  1. מגדירים את binlog_expire_logs_seconds לתקופה ארוכה מספיק כדי לתמוך בהעברת מסד הנתונים.

    מידע נוסף זמין במאמר הגדרת פרמטרים של שרת במסד נתונים של Azure ל-MySQL ובפרמטר binlog_expire_logs_seconds במאמרי העזרה של Microsoft.

  2. מפעילים מחדש את השרת כדי שהשינויים שביצעתם ייכנסו לתוקף.

יצירת חשבון משתמש לרפליקציה

בשרת החיצוני צריך להיות חשבון משתמש של 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 ביעד. אפשר לציין את הערכים הבאים בפרמטר הזה:

  • SSL_OPTION_UNSPECIFIED: מסד הנתונים של היעד מתחבר למסד הנתונים של המקור ללא הצפנה.
  • ‫DISABLED: פרוטוקול SSL מושבת כשהרפליקה מתחברת למסד הנתונים של המקור.
  • REQUIRE: נדרש SSL כדי שהרפליקה תתחבר למסד הנתונים של המקור.
  • ‫VERIFY_CA: משמש לציון אם אימות של שרת בלבד או אימות של שרת-לקוח משמש כחלק מהצפנת SSL/TLS כדי להתחבר בין מסדי הנתונים של המקור והיעד.

    כדי להשתמש באימות בצד השרת בלבד, צריך לציין במשתנה SOURCE_CERT את אישור ה-PEM בקידוד x509 של רשות האישורים (CA) שחתמה על האישור של השרת החיצוני.

    כדי להשתמש באימות שרת-לקוח, מבצעים את ההחלפות הבאות:

    • ‫SOURCE_CERT: מספקים את האישור של רשות האישורים שחתמה על האישור של שרת מסד הנתונים של המקור
    • ‫CLIENT_CERT: מספקים את האישור שבו משתמש מסד הנתונים של היעד כדי לאמת את שרת מסד הנתונים של המקור.
    • ‫CLIENT_KEY: מספקים את המפתח הפרטי שמשויך לאישור הלקוח

ערך ברירת המחדל של הפרמטר הזה הוא SSL_OPTION_UNSPECIFIED.

יצירת מופע של ייצוג מקור

לפני שמתחילים את השלב הזה, יוצרים קובץ 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 היוצאת של הרפליקה:

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. ליד כתובת ה-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

מעקב אחרי הרפליקציה

כשהרפליקה של 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.

מנגנון אחד לדילוג על שגיאות הוא להגדיר את דגל ההגדרות האישיות 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.

כדי ליצור רפליקה מדורגת, מריצים את הפקודות הבאות:

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Cloud de Confiance .

    כניסה לדף Cloud SQL Instances

  2. ב-MySQL מגרסה 5.7 ואילך, מפעילים את הרפליקציה.
  3. בכרטיסייה Replicas, לוחצים על הרפליקה שתשמש כהורה לרפליקה שרוצים ליצור.
  4. לוחצים על Create replica.
  5. בדף Create read replica, מעדכנים את מזהה המכונה ואת כל אפשרויות ההגדרה האחרות, כולל השם, האזור והתחום.
  6. לוחצים על יצירה.

    מערכת Cloud SQL יוצרת רפליקה. המערכת תחזיר אתכם לדף המכונה של הרפליקה הראשית.

  7. חוזרים על שלבים 4 עד 6 לכל רפליקה מדורגת חדשה שרוצים ליצור.

gcloud

  1. אם משתמשים ב-MySQL בגרסה 5.7 ואילך, מפעילים את יומני ה-binlog של המכונה הראשית של הרפליקה החדשה:
    gcloud sql instances patch --enable-bin-log
          --project=cascade-replica PARENT_REPLICA_NAME
    מחליפים את PARENT_REPLICA_NAME בשם של הרפליקה הראשית.
  2. יוצרים את הרפליקה החדשה על ידי ציון הרפליקה של Cloud SQL כמכונה הראשית באמצעות הדגל --master-instance-name:
    gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    מחליפים את הערכים הבאים:
    • ‫REPLICA_NAME: המזהה הייחודי של הרפליקה שיוצרים
    • ‫PARENT_REPLICA_NAME: השם של הרפליקה של Cloud SQL
  3. אחרי שיוצרים את הרפליקה, אפשר לראות שהשינויים שבוצעו במכונה הראשית משוכפלים בכל הרפליקות בשרשרת הרפליקות המדורגות.

curl

  1. אם אתם משתמשים ב-MySQL בגרסה 5.7 ואילך, הפעילו את הרישום ביומן הבינארי:

    כדי להפעיל את הרישום ביומן הבינארי, שמרו את ה-JSON הבא בקובץ בשם request.JSON, ואז הפעילו את הפקודה curl כדי להפעיל את הרישום ביומן הבינארי.
    {
      "settings":
      {
        "backupConfiguration":
        {
          "enabled": false,
          "binaryLogEnabled": true
        }
      }
    }
  2. כדי ליצור רפליקה מתחת לרפליקת ההורה, עורכים את דוגמת הקוד הבאה ב-JSON ושומרים אותה בקובץ בשם request.json:
    {
      "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  3. מריצים את הפקודה הבאה:
    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"

קידום הרפליקה

כדי לקדם את הרפליקה:

  1. קידום הרפליקה למכונה ראשית. שימו לב שיומני GTID ויומנים בינאריים מופעלים, ושהגיבויים המתוזמנים מופעלים ברפליקה שקודמה.
  2. הוספת רפליקות לקריאה למכונה.
  3. אופציונלי: מגדירים את המכונה לזמינות גבוהה (HA). כדי למנוע זמן השבתה נוסף, אתם יכולים להפעיל זמינות גבוהה בזמן הגדרת רפליקה על ידי הגדרת AVAILABILITY_TYPE ל-REGIONAL.

מגבלות

  • אם בוחרים מסד נתונים להעברה, מבצעים העברה ואחר כך מסירים את מסד הנתונים מרשימת מסדי הנתונים שנבחרו, התוכן של מסד הנתונים שהועבר נשאר ביעד, אלא אם מוחקים אותו באופן מפורש.

  • אם תנסו להעביר מסד נתונים ספציפי שתלוי בנתונים במסד נתונים אחר שלא מועבר, יכול להיות שההעברה של מסד הנתונים שבחרתם תיכשל. למידע נוסף על השגיאות שאתם עשויים להיתקל בהן, ראו פתרון בעיות.

  • אם אתם מעבירים מסדי נתונים נבחרים, אתם לא יכולים להשתמש בהצהרות של שפת הגדרת נתונים (DDL) בשביל שגרות או אירועים של מסד נתונים כלשהו, בלי קשר ליחסי תלות או לבחירה שלכם במסד הנתונים להעברה.

  • אי אפשר לציין להעברה מסדי נתונים נבחרים ששמות מסדי הנתונים שלהם מכילים את התווים המילוליים _ (קווים תחתונים (U+005F)), % (סימני אחוז (U+0025)) או , (פסיקים (U+002C)).

המאמרים הבאים