ייצוא קובץ SQL

כדי לגבות סכימות ונתונים של מסדי נתונים כסקריפט של טקסט פשוט של הצהרות SQL, אתם יכולים לייצא נתונים מאשכולות של AlloyDB ל-PostgreSQL לקובץ SQL מוכן לשימוש בקטגוריה של Cloud Storage.

כדי להעביר מסד נתונים שלם משרת מסד נתונים נתמך למכונה חדשה של AlloyDB, קראו את המאמר העברת מסד נתונים ל-AlloyDB באמצעות Database Migration Service. אם אתם מייצאים כדי ליצור מכונה חדשה מהקובץ שיוצא, כדאי לשחזר אשכול מגיבוי שמור.

אתם יכולים לבטל את הייצוא של נתונים מאשכולות של AlloyDB ל-PostgreSQL. איך מבטלים פעולת ייצוא?

לפני שמתחילים

  • לפני שמתחילים פעולת ייצוא, חשוב לזכור שפעולות ייצוא משתמשות במשאבי מסד הנתונים, אבל הן לא מפריעות לפעולות הרגילות של מסד הנתונים, אלא אם המכונה לא הוקצתה כראוי.
  • חיובים על העברת נתונים בין אזורים חלים כשקטגוריית היעד נמצאת באזור שונה מאשכול המקור. מידע נוסף זמין במאמר תמחור של AlloyDB ל-PostgreSQL.
  • הדחיסה מופעלת אם שם האובייקט מסתיים בסיומת .gz. לאחר מכן, האובייקט מיוצא בפורמט .gz ל-Cloud Storage.
  • אפשר להריץ כמה פעולות ייצוא במקביל.

התפקידים וההרשאות שנדרשים כדי לייצא מ-AlloyDB

כדי לייצא נתונים מ-AlloyDB ל-Cloud Storage, למשתמש שמפעיל את הייצוא צריך להיות אחד מהתפקידים הבאים בניהול זהויות והרשאות גישה (IAM):

בנוסף, לחשבון השירות של אשכול AlloyDB צריך להיות אחד מהתפקידים הבאים בקטגוריה של Cloud Storage:

  • תפקיד ה-IAM‏ storage.objectAdmin או storage.objectCreator
  • תפקיד בהתאמה אישית, כולל ההרשאה storage.objects.create

למידע נוסף על תפקידי IAM, קראו את המאמר ניהול זהויות והרשאות גישה.

ייצוא נתונים מ-AlloyDB לקובץ SQL מוכן לשימוש

כשמייצאים נתונים מ-AlloyDB, באמצעות ה-CLI של gcloud או ה-API, משתמשים בכלי השירות pg_dump עם האפשרויות הנדרשות כדי לוודא שקובץ הייצוא שנוצר תקין ושאפשר לייבא אותו בחזרה ל-AlloyDB.

כדי לייצא נתונים ממסד נתונים באשכול AlloyDB לקובץ SQL מוכן לשימוש בקטגוריה של Cloud Storage:

gcloud

  1. מוודאים שיש קטגוריה של Cloud Storage קיימת לאחסון הקובץ המיוצא, או יוצרים קטגוריה חדשה של Cloud Storage.
  2. משתמשים ב-gcloud storage buckets add-iam-policy-binding כדי להקצות את התפקיד ב-IAM (storage.objectAdmin) לחשבון השירות של AlloyDB בקטגוריה. הפורמט של חשבון השירות הוא:

    service-PROJECT_NUMBER@gcp-sa-alloydb.

    במאמר הגדרה וניהול של מדיניות IAM בקטגוריות מוסבר איך מקצים תפקידים בקטגוריות.

    אם אתם מייצאים את הקובץ לקטגוריה קיימת של Cloud Storage שלא אתם יצרתם, יכול להיות שתצטרכו הרשאות IAM נוספות כדי להקצות תפקידים בקטגוריה. למידע נוסף, קראו על התפקידים הנדרשים.

  3. מייצאים את מסד הנתונים לקטגוריה של Cloud Storage. ברשימה הבאה מפורטות אפשרויות לייצוא נתונים בפורמט של קובץ dump של SQL:

    • ‫--async (אופציונלי): חזרה מיידית, בלי להמתין שהפעולה תסתיים.
    • ‫--tables (אופציונלי): הטבלאות שמהן רוצים לייצא.
    • ‫--schema-only (אופציונלי): אם מוגדר, מייצאים רק את הסכימה.
    • ‫--clean-target-objects (אופציונלי): אם מוגדר, פקודות פלט ל-DROP כל אובייקטי מסד הנתונים שהועברו לפני פלט הפקודות ליצירתם.
    • ‫--if-exist-target-objects (אופציונלי): אם מוגדר, משתמשים בפקודות DROP ... IF EXISTS כדי לבדוק אם האובייקט קיים לפני שמוחקים אותו במצב --clean-target-objects.

    כדי להשתמש בתכונות האלה, צריך לכלול את האפשרויות האלה בפקודה gcloud. אם רוצים לייצא רק הגדרות של אובייקטים (סכימה) ולא נתונים, משתמשים בדגל --schema-only. כדי לציין אילו טבלאות לייצא, משתמשים בדגל --tables=TABLE_NAMES. אפשר לציין ערכים מופרדים בפסיקים של שמות טבלאות או תבניות של תווים כלליים לחיפוש כדי לציין כמה טבלאות.

    אם לא, צריך להסיר את הפרמטרים האלה מהפקודה הבאה:

    gcloud alloydb clusters export CLUSTER_NAME \
      --region=REGION \
      --database=DATABASE_NAME \
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME" \
      --tables=TABLE_NAMES \
      --schema-only \
      --clean-target-objects \
      --if-exist-target-objects \
      --sql

    הפקודה gcloud alloydb clusters export לא מכילה טריגרים או פרוצדורות מאוחסנות, אבל היא מכילה תצוגות. כדי לייצא טריגרים או פרוצדורות מאוחסנות, משתמשים בכלי pg_dump.

    למידע נוסף על השימוש בפקודה gcloud alloydb clusters export, עיינו בדף העזרה של הפקודה gcloud alloydb clusters export.

  4. אם אתם לא צריכים לשמור את תפקיד ה-IAM שהגדרתם קודם, בטלו את התפקיד.

REST v1

  1. מוודאים שיש קטגוריה קיימת ב-Cloud Storage לאחסון הקובץ שיוצא, או יוצרים קטגוריה חדשה:

    gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAME
  2. משתמשים ב-gcloud storage buckets add-iam-policy-binding כדי להקצות את התפקיד ב-IAM (storage.objectAdmin) לחשבון השירות של AlloyDB בקטגוריה. הפורמט של חשבון השירות הוא:

     service-PROJECT_NUMBER@gcp-sa-alloydb.

    במאמר הגדרה וניהול של מדיניות IAM בקטגוריות מוסבר איך מקצים תפקידים בקטגוריות.

    אם אתם מייצאים את הקובץ לקטגוריה קיימת של Cloud Storage שלא אתם יצרתם, יכול להיות שתצטרכו הרשאות IAM נוספות כדי להקצות תפקידים בקטגוריה. למידע נוסף, קראו על התפקידים הנדרשים.

  3. מייצאים את מסד הנתונים.

    משתמשים ב-method הבא ב-HTTP ובכתובת ה-URL:

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export

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

    • ‫PROJECT_ID: מזהה הפרויקט.
    • ‫REGION: האזור שבו פרוס אשכול AlloyDB.
    • ‫CLUSTER_ID: מזהה האשכול.
    • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
    • ‫PATH_TO_SQL_FILE: הנתיב לקובץ ה-SQL המוכן לשימוש.
    • ‫DATABASE_NAME: השם של מסד נתונים במכונה של AlloyDB.
    • ‫TABLES: הטבלאות שמהן רוצים לייצא.
    • ‫SCHEMA_ONLY: אם הערך הוא true, מייצאים רק את הסכימה.
    • ‫CLEAN_TARGET_OBJECTS: אם הערך הוא true, פקודות הפלט הן DROP לכל אובייקטי מסד הנתונים שהועברו, לפני פקודות הפלט ליצירה שלהם.
    • ‫IF_EXIST_TARGET_OBJECTS: אם true, צריך להשתמש בפקודות DROP ... IF EXISTS כדי לבדוק אם האובייקט קיים לפני שמוחקים אותו במצב clean_target_objects.

    כדי להשתמש בתכונות האלה, צריך להגדיר את הערכים של הפרמטרים האלה בתור true. אחרת, מגדירים את הערכים שלהם כ-false. אם רוצים לייצא רק הגדרות של אובייקטים (סכימה) ולא נתונים, משתמשים בדגל schema_only. כדי לציין אילו טבלאות לייצא, משתמשים בשדה tables. כדי לבחור כמה טבלאות, אפשר להזין רשימה מופרדת בפסיקים של שמות טבלאות או לכתוב תווים כלליים לחיפוש בתבנית.

    תוכן בקשת JSON:

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_SQL_FILE"
      },
      "database": "DATABASE_NAME",
      "sql_export_options": {
        "schema_only": true,
        "tables": [
         "TABLE1",
         "TABLE2"
        ],
        "clean_target_objects": false,
        "if_exist_target_objects": true
      }
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    ‏Curl (Linux,‏ macOS או Cloud Shell)

    שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"
       

    ‎PowerShell (Windows)

    שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

       $cred = gcloud auth print-access-token
       $headers = @{ "Authorization" = "Bearer $cred" }
    
       Invoke-WebRequest `
         -Method POST `
         -Headers $headers `
         -ContentType: "application/json; charset=utf-8" `
         -InFile request.json `
       -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
       

    תגובת JSON אמורה להיראות כך:

    תשובה

    {
      "name": "projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
        "createTime": "2024-09-17T06:05:31.244428646Z",
        "target": "projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID",
        "verb": "export",
        "requestedCancellation": false,
        "apiVersion": "v1"
      },
      "done": false
    }
    
  4. אם אתם לא צריכים לשמור את תפקיד ה-IAM שהגדרתם קודם, הסירו אותו.

לרשימה המלאה של הפרמטרים של הבקשה: clusters.export.

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