כדי לגבות סכימות ונתונים של מסדי נתונים כסקריפט של טקסט פשוט של הצהרות 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 (
roles/alloydb.admin) - תפקיד בהתאמה אישית, שכולל את ההרשאות הבאות:
alloydb.clusters.getalloydb.clusters.export
בנוסף, לחשבון השירות של אשכול 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
- מוודאים שיש קטגוריה של Cloud Storage קיימת לאחסון הקובץ המיוצא, או יוצרים קטגוריה חדשה של Cloud Storage.
משתמשים ב-
gcloud storage buckets add-iam-policy-bindingכדי להקצות את התפקיד ב-IAM (storage.objectAdmin) לחשבון השירות של AlloyDB בקטגוריה. הפורמט של חשבון השירות הוא:service-PROJECT_NUMBER@gcp-sa-alloydb.במאמר הגדרה וניהול של מדיניות IAM בקטגוריות מוסבר איך מקצים תפקידים בקטגוריות.
אם אתם מייצאים את הקובץ לקטגוריה קיימת של Cloud Storage שלא אתם יצרתם, יכול להיות שתצטרכו הרשאות IAM נוספות כדי להקצות תפקידים בקטגוריה. למידע נוסף, קראו על התפקידים הנדרשים.
מייצאים את מסד הנתונים לקטגוריה של 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.-
אם אתם לא צריכים לשמור את תפקיד ה-IAM שהגדרתם קודם, בטלו את התפקיד.
REST v1
מוודאים שיש קטגוריה קיימת ב-Cloud Storage לאחסון הקובץ שיוצא, או יוצרים קטגוריה חדשה:
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_NAME --location=LOCATION_NAMEמשתמשים ב-
gcloud storage buckets add-iam-policy-bindingכדי להקצות את התפקיד ב-IAM (storage.objectAdmin) לחשבון השירות של AlloyDB בקטגוריה. הפורמט של חשבון השירות הוא:service-PROJECT_NUMBER@gcp-sa-alloydb.במאמר הגדרה וניהול של מדיניות IAM בקטגוריות מוסבר איך מקצים תפקידים בקטגוריות.
אם אתם מייצאים את הקובץ לקטגוריה קיימת של Cloud Storage שלא אתם יצרתם, יכול להיות שתצטרכו הרשאות IAM נוספות כדי להקצות תפקידים בקטגוריה. למידע נוסף, קראו על התפקידים הנדרשים.
מייצאים את מסד הנתונים.
משתמשים ב-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 }אם אתם לא צריכים לשמור את תפקיד ה-IAM שהגדרתם קודם, הסירו אותו.
לרשימה המלאה של הפרמטרים של הבקשה: clusters.export.