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