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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  4. חשוב לוודא שיש לכם את התפקידים Cloud SQL Admin,‏ Storage Admin ו-Compute Viewer בחשבון המשתמש.

    כניסה לדף IAM

התקנה של Cloud de Confiance SDK

כדי להגדיר שכפול, צריך להתקין Cloud de Confiance SDK בשרת החיצוני. כדאי להתקין את ה-SDK בשרת החיצוני, אלא אם הוא כבר מותקן במקום אחר.

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

רשימת משימות לשרת חיצוני

  • מוודאים שגרסה MySQL 5.7,‏ 8.0 או 8.4 מותקנת בשרת החיצוני. יש תמיכה ב-MySQL Community Edition,‏ Cloud SQL ל-MySQL,‏ Amazon Aurora,‏ MySQL ב-Amazon RDS ו-Microsoft Azure Database for MySQL Flexible Server.

    • אתם צריכים להשתמש בגרסה ראשית של MySQL בעותק המשוכפל של Cloud SQL, שהיא זהה לגרסה של MySQL שפועלת בשרת החיצוני או חדשה ממנה.
    • אם MySQL 5.5 מותקן בשרת החיצוני, לא תהיה תמיכה ב-GTID.
  • מוודאים שהיומנים הבינאריים מופעלים ושמתקיימים התנאים הבאים:

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

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

  • אם כתובת ה-IP הפרטית מופעלת בשכפול Cloud SQL כי כתובת ה-IP הפרטית היוצאת לא סטטית, צריך להגדיר את חומת האש של השרת החיצוני כך שתאפשר את טווח כתובות ה-IP הפנימי שהוקצה לגישה לשירותים פרטיים של רשת ה-VPC ששכפול Cloud SQL משתמש בה כרשת פרטית.

    צריך להגדיר את חומת האש של שרת מסד הנתונים של המקור כך שתאפשר את כל טווח כתובות ה-IP הפנימיות שהוקצה לחיבור השירות הפרטי של רשת ה-VPC שמופע היעד של Cloud SQL משתמש בה כערך של השדה privateNetwork בהגדרות ipConfiguration שלו.

    כדי למצוא את טווח כתובות ה-IP הפנימיות:

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

      לדף VPC networks

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

    3. לוחצים על הכרטיסייה Private service connection (חיבור פרטי לשירות).

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

  • ‫InnoDB הוא מנוע האחסון הנתמך היחיד ב-Cloud SQL. העברה באמצעות MyISAM עלולה לגרום לחוסר עקביות בנתונים ודורשת אימות נתונים. מידע נוסף זמין במאמר המרת טבלאות מ-MyISAM ל-InnoDB במאמרי העזרה של MySQL.

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

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

קהילת MySQL

אם השרת החיצוני שלכם משתמש ב-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 Database for 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.
SELECTED_OBJECTS רשימה מופרדת בפסיקים של אובייקטים, שמכילה את מסדי הנתונים שאתם מעבירים ממופע הייצוג של המקור למופע היעד של Cloud SQL.
SOURCE HOST כתובת ה-IPv4 והיציאה של השרת החיצוני, או כתובת ה-DNS של השרת החיצוני. אם משתמשים בכתובת DNS, היא יכולה לכלול עד 60 תווים. אם השרת החיצוני מתארח ב-Cloud SQL, היציאה היא 3306 .
USERNAME חשבון המשתמש של השכפול בשרת החיצוני.
PASSWORD הסיסמה של חשבון המשתמש לשכפול.
BUCKET שם הקטגוריה שמכילה את קובץ ה-dump. צריך לכלול את האפשרות הזו רק אם מגדירים שכפול באמצעות קובץ dump שקיים בקטגוריה של Cloud Storage.
DUMP_FILE קובץ ב-Bucket שמכיל את הנתונים מהשרת החיצוני.
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 את אישור ה-x509 בקידוד PEM של רשות האישורים (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.
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. כדי להפוך את העותק המשוכפל לזמינות גבוהה, מגדירים את הערך ל-REGIONAL. מידע על הערכים המותרים זמין במאמר בנושא SqlAvailabilityType.
אחרי שיוצרים העתק HA של שרת חיצוני, אי אפשר לשנות אותו להעתק שאינו HA. ההפך הוא גם נכון. אי אפשר לשנות עותק משוכפל של שרת חיצוני שאינו HA לעותק משוכפל של HA.
מעבר ידני לגיבוי עלול להוביל להעברה שלא ניתן לשחזר אם מנסים לבצע אותו כשהמופע עדיין טוען את הנתונים הראשוניים, או להשבתה זמנית אם המופע כבר משכפל מהמקור. בודקים את סטטוס הרפליקציה.
SOURCE_REPRESENTATION_INSTANCE_NAME השם של מופע ייצוג המקור.
SOURCE_REGION האזור שמוקצה למופע של ייצוג המקור.
DATABASE_VERSION גרסת מסד הנתונים שבה רוצים להשתמש עם העותק המשוכפל של Cloud SQL. האפשרויות לגרסה הזו הן MYSQL_5_6,‏ MYSQL_5_7,‏ MYSQL_8_0 או MYSQL_8_4. הגרסה צריכה להיות זהה לגרסת מסד הנתונים שפועלת בשרת החיצוני, או להיות גרסה אחת מאוחרת יותר.
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, מעבירים את מצביע העכבר מעל תיאור הכלי מידע נוסף ומאחזרים את כתובת ה-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 Server יש את ההצהרה FLUSH USER_STATISTICS.
    • ‫Percona for MySQL מאפשר להשתמש ב-DDL כדי להוסיף עמודה DATETIME עם ברירת מחדל של אפס epoch (לדוגמה, 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. לוחצים על יצירת העתק.
  5. בדף Create read replica (יצירת רפליקה לקריאה), מעדכנים את מזהה המופע ואת כל אפשרויות ההגדרה האחרות, כולל השם, האזור והתחום.
  6. לוחצים על יצירה.

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

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

gcloud

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

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)) בשמות שלהם.

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