הודעות שגיאה ב-Cloud SQL ל-PostgreSQL

בדף הזה נסביר על חלק מהודעות השגיאה שנתקלים בהן ב-Cloud SQL.

סקירה כללית

הודעות שגיאה ב-Cloud SQL מגיעות ממקורות רבים ומופיעות במקומות רבים. חלק מהודעות השגיאה מגיעות ממנועי מסדי הנתונים עצמם, חלק משירות Cloud SQL, חלק מאפליקציות לקוח וחלק מוחזרות על ידי קריאות ל-Cloud SQL Admin API.

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

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

שגיאות תפעוליות

A | B | C | D | E | F | G | I | L | M | N | O | P | Q | R | S | T | U | W

הודעת השגיאה פתרון בעיות
לא נמצא טווח כתובות IP שהוקצה ברשת. לא בוצע עדכון של חיבורי VPC לאחר שינוי או הסרה של טווח שהוקצה.

צריך לשנות את החיבור הפרטי. משתמשים בפקודה הבאה, ומקפידים להשתמש בארגומנט --force:

gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
הודעת השגיאה פתרון בעיות
בקשה שגויה. יכולות להיות הרבה סיבות להודעה הזו. ‫Illegal Argument הוא אחד מהם. במקרה הזה, הבקשה משתמשת בארגומנט שגוי או בערך לא תקין לארגומנט. במקרים רבים אחרים, הודעת השגיאה עשויה להכיל רמז מועיל.

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

הודעת השגיאה פתרון בעיות
אי אפשר לשנות את הטווחים שהוקצו ב-CreateConnection. צריך להשתמש ב-UpdateConnection. לא בוצע עדכון של חיבורי VPC לאחר שינוי או הסרה של טווח שהוקצה.

צריך לשנות את החיבור הפרטי. משתמשים בפקודה הבאה, ומוודאים שמשתמשים בארגומנט --force:

gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
החיבור אופס על ידי עמית.

אם אתם מנסים לבצע ייצוא ו-Cloud Storage לא מקבל נתונים בפרק זמן מסוים, החיבור מתאפס.

אפשר לנסות ייצוא ידני באמצעות pg_dump.

Constraints/sql.restrictAuthorizedNetworks. הפעולה של שיבוט נחסמת על ידי ההגדרה Authorized Networks. Authorized Networks מוגדרות לכתובות IP ציבוריות בקטע Connectivity (קישוריות) במסוף Google Cloud , ושיבוט לא מותר בגלל שיקולי אבטחה.

אם אפשר, מסירים את כל הערכים של Authorized Networks ממופע Cloud SQL. אחרת, יוצרים רפליקה בלי רשומות Authorized Networks.

הודעת השגיאה פתרון בעיות
מסד הנתונים user לא קיים. gcloud sql connect --user פועל רק עם משתמש ברירת המחדל postgres.

מתחברים למשתמש שמוגדר כברירת מחדל ואז מחליפים משתמש.

הדיסק מלא. יכול להיות שהגודל של הדיסק של המופע הראשי יתמלא במהלך יצירת רפליקה.

עורכים את המופע הראשי כדי לשדרג אותו לגודל דיסק גדול יותר.

הודעת השגיאה פתרון בעיות
יצירת רשת משנה נכשלה. אין יותר כתובות זמינות בטווח כתובות ה-IP.

לא נמצאו בלוקים פנויים בטווחי כתובות ה-IP שהוקצו. צריך להקצות טווחים חדשים לספק השירות הזה.

אין יותר כתובות זמינות בטווח כתובות ה-IP שהוקצה.

כדאי לשקול את התרחישים האפשריים הבאים:

  • הגודל של טווח כתובות ה-IP שהוקצה לחיבור הפרטי לשירות קטן מ-‎ /24.
  • הגודל של טווח כתובות ה-IP שהוקצה לחיבור השירות הפרטי קטן מדי למספר מופעי Cloud SQL.
  • הדרישה לגבי הגודל של טווח כתובות ה-IP שהוקצה תהיה גדולה יותר אם המכונות הווירטואליות נוצרות בכמה אזורים. הצגת גודל הטווח שהוקצה

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

אם מקצים טווח חדש, חשוב לוודא שהוא לא חופף להקצאות קיימות.

אחרי שיוצרים טווח IP חדש, מעדכנים את הקישור בין רשתות ה-VPC באמצעות הפקודה הבאה:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK
--project=PROJECT_ID \
--force

אם מרחיבים הקצאה קיימת, חשוב להקפיד להגדיל את טווח ההקצאה ולא להקטין אותו. לדוגמה, אם ההקצאה המקורית הייתה 10.0.10.0/24, ההקצאה החדשה צריכה להיות לפחות 10.0.10.0/23.

באופן כללי, אם מתחילים מהקצאה של ‎ /24, מומלץ להקטין את ‎ /mask ב-1 לכל תנאי (קבוצת סוגי מופעים נוספת, אזור נוסף). לדוגמה, אם מנסים ליצור שתי קבוצות של סוגי מכונות באותו הקצאה, מעבר מ-‎ /24 ל-‎ /23 מספיק.

אחרי הרחבת טווח כתובות IP קיים, מעדכנים את ה-VPC Peering באמצעות הפקודה הבאה:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
הודעת השגיאה פתרון בעיות
‪(gcloud.sql.connect) נראה שללקוח שלך אין קישוריות IPv6 ולמופע של מסד הנתונים אין כתובת IPv4. אתם מנסים להתחבר למופע של כתובת IP פרטית באמצעות Cloud Shell.

אי אפשר להתחבר מ-Cloud Shell למופע עם כתובת IP פרטית בלבד.

הודעת השגיאה פתרון בעיות
שגיאה פנימית. יכול להיות שבפרויקט חסר חשבון השירות של Service Networking שנדרש לתכונה הזו.

כדי לתקן את הרשאות השירות, משביתים את Service Networking API, מחכים חמש דקות ומפעילים אותו מחדש.

בקשה לא תקינה: הגדרה שגויה של Service Networking למופע. Service Networking API לא מופעל בפרויקט.

מפעילים את Service Networking API בפרויקט. אם אתם רואים את השגיאה הזו כשאתם מנסים להקצות כתובת IP פרטית למופע Cloud SQL, ואתם משתמשים ב-VPC משותף, אתם צריכים גם להפעיל את Service Networking API בפרויקט המארח.

המופע אינו זכאי ליצירת רפליקה. המופע הראשי לא עומד בדרישות הדרושות לשכפול. רשימת הדרישות מופיעה במאמר בנושא מגבלות השכפול.
הודעת השגיאה פתרון בעיות
שיוך הרשת נכשל. ה-Service Networking API לא מופעל בפרויקט.

מפעילים את Service Networking API בפרויקט. אם אתם רואים את השגיאה הזו כשאתם מנסים להקצות כתובת IP פרטית למופע Cloud SQL, ואתם משתמשים ב-VPC משותף, אתם צריכים גם להפעיל את Service Networking API בפרויקט המארח.

הודעת השגיאה פתרון בעיות
הפעולה נכשלה כי פעולה אחרת כבר הייתה בתהליך. רוב הפעולות ב-Cloud SQL הן סינכרוניות. אפשר להריץ רק אחת בכל פעם.

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

הודעת השגיאה פתרון בעיות
אימות הסיסמה נכשל עבור המשתמש postgres. כשיוצרים מופע חדש של Cloud SQL ל-PostgreSQL, נוצר משתמש אדמין עם שם ברירת המחדל postgres, אבל לא נוצרת סיסמה. צריך להגדיר סיסמה למשתמש כדי שהוא יוכל להתחבר.
הודעת השגיאה פתרון בעיות
חריגה מהמכסה. הגעתם למגבלה של המכסה לדקה או למכסה היומית. כדאי לעיין במכסות ובמגבלות של Cloud SQL.

אפשר לבקש להגדיל את המכסות מGoogle Cloud המסוף.

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

מגדילים את הערך של הדגל max_connections. מידע נוסף על הגדרת דגלים של מסד הנתונים

בבקשה חסר מפתח API תקין. יכול להיות שאין לכם קובץ JSON תקין של מפתח חשבון שירות, או שהוא לא מאוחסן במיקום הצפוי.

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

הודעת השגיאה פתרון בעיות
שגיאת SSL: מרווח פנימי לא תקין. שגיאה באישור השרת.

יוצרים אישור שרת חדש ומבצעים רוטציה.

אירעה שגיאת מערכת.
  • יכול להיות שלמשתמש אין את כל ההרשאות שהוא צריך ב-Cloud Storage.
  • יכול להיות שהטבלה במסד הנתונים לא קיימת.

אפשר לנסות את הפעולות הבאות…

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

הודעת השגיאה פתרון בעיות
ההגדרה של הטבלה השתנתה. במהלך תהליך הייצוא, חל שינוי בטבלה.

יכול להיות שהעברת הנתונים תיכשל אם משתמשים בהצהרות הבאות במהלך פעולת הייצוא:

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE

מסירים את ההצהרות האלה מפעולת ה-dump.

גודל הקובץ הזמני חורג מהערך של temp_file_limit. הערך של הדגל temp_file_limit נמוך מדי ביחס לשימוש במסד הנתונים.

הגדלת הגודל של temp_file_limit. מידע נוסף על הגדרת דגלים של מסד הנתונים

(Timeout) במהלך הייצוא. הייצוא בפורמטים CSV ו-SQL מתבצע באופן שונה. פורמט ה-SQL כולל את כל מסד הנתונים, ולכן סביר להניח שייקח יותר זמן להשלים את הפעולה.

כדי להקטין את הגודל ואת משך הזמן של כל פעולה, כדאי להשתמש בפורמט CSV ולהפעיל כמה משימות ייצוא קטנות יותר.

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

צריך להקטין את ערך הדגל max_connections או לפנות אל תמיכת הלקוחות כדי לבקש הסרה של הדגל ואז לבצע hard drain. הפעולה הזו מאלצת את המופע להפעיל מחדש במארח אחר עם הגדרה חדשה, ללא הדגל או ההגדרה.

הודעת השגיאה פתרון בעיות
אין הרשאה להתחבר. יכולות להיות לכך הרבה סיבות, כי ההרשאה מתבצעת בכמה רמות:
  • ברמת מסד הנתונים, המשתמש במסד הנתונים חייב להיות קיים והסיסמה שלו חייבת להיות זהה
  • יכול להיות שלמשתמש אין את הרשאות ה-IAM הנכונות ברמת הפרויקט, כולל ההרשאות serviceusage.services.use או cloudsql.instances.connect.
  • ברמת הרשת, אם מכונת Cloud SQL משתמשת בכתובת IP ציבורית, כתובת ה-IP של המקור של החיבור צריכה להיות ברשת מורשית.

אפשר לנסות את הפעולות הבאות…

  • מוודאים שהמשתמש קיים והסיסמה שלו תואמת.
  • מקצים את התפקיד Service Usage Consumer לחשבון המשתמש. התפקיד הזה כולל את ההרשאה serviceusage.services.use.
  • אם משתמשים בכתובת IP ציבורית, צריך לוודא שכתובת ה-IP של המקור נמצאת ברשת מורשית.
הודעת השגיאה פתרון בעיות
‫x509: האישור לא תקף לאף שם. בעיה ידועה: Cloud SQL Proxy Dialer לא תואם ל-Go 1.15 בשלב הזה.

עד שהבעיה תיפתר, אפשר לעיין בדיון הזה ב-GitHub, שכולל פתרון עקיף.

שגיאות לא ידועות

בטבלה הבאה מפורטים כמה מקרים מוכרים שבהם יכולה להתרחש שגיאה Unknown Error, ופתרונות ספציפיים במקרים הרלוונטיים. עם זאת, זוהי רשימה חלקית. אם לא מצאתם את הפנייה שלכם בטבלה, כדאי לבדוק בכלי הציבורי למעקב אחרי בעיות ב-Cloud SQL. אם הבעיה לא מופיעה שם, אפשר לשלוח דוח או לעיין באפשרויות תמיכה אחרות.

פעולה יכול להיות שהבעיה היא... דברים שכדאי לנסות...
הוספת משתמש אם המשתמש כבר קיים במסד הנתונים, השגיאה הזו יכולה להופיע כשמנסים להוסיף אותו. בודקים שהמשתמש לא קיים כבר במסד הנתונים.
גיבוי אם ההודעה הזו מופיעה במהלך גיבוי אוטומטי או ידני, סביר להניח שהדיסק של המופע מלא. אם הקובץ הזמני תופס יותר מדי מקום, אפשר להפעיל מחדש את המופע כדי להסיר את הקובץ ולפנות מקום בדיסק. אחרת, יכול להיות שתצטרכו לשדרג את המכונה לגודל דיסק גדול יותר.
שכפל זה יכול לקרות כשאין מספיק משאבים באזור שנבחר. אפשר לנסות אזור אחר באזור, או לחכות ולנסות שוב מאוחר יותר.
ליצירת מופע
  • זה יכול לקרות כשמנסים להשתמש מחדש באותו שם של מופע שנמחק לאחרונה.
  • הסיבה יכולה להיות גם בעיות לסירוגין בחיבור לאינטרנט.
  • יכול להיות שביומנים יופיע שה-Service Networking API לא מופעל בפרויקט.
  • השגיאה הזו מתרחשת גם כשמנסים ליצור כמה מופעים במקביל. לדוגמה, סקריפטים של Terraform מאפשרים את הניסיון הזה.
  • סיבה נוספת יכולה להיות שמשאב מסוים מוצה או שחלה חריגה ממגבלת מכסה. מחפשים ביומנים רשומה כמו Quota 'INTERNAL_FORWARDING_RULES_WITH_TARGET_INSTANCE_PER_NETWORK' exceeded. Limit: 100.0 globally
  • השגיאה הזו יכולה לקרות אם יצירת רשת משנה נכשלת כשאין יותר כתובות זמינות בטווח כתובות ה-IP.
  • אי אפשר להשתמש שוב בשמות של מופעים עד שבוע אחרי המחיקה.
  • במקרה של בעיות קישוריות לסירוגין, הפתרון היחיד הוא לנסות שוב.
  • מפעילים את Service Networking API בפרויקט.
  • סקריפטים ליצירת מופעים מקבילים יצליחו ליצור רק אחד מהמופעים. משנים את הסקריפט כך שימתין עד שכל פעולת יצירה של מופע תסתיים לפני שימשיך לפעולה הבאה.
  • הקצאת טווחים חדשים.
יצירת רפליקה סביר להניח ששגיאה ספציפית יותר מופיעה בקובצי היומן. בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.

אם השגיאה היא set Service Networking service account as servicenetworking.serviceAgent role on consumer project, צריך להשבית ולהפעיל מחדש את Service Networking API. הפעולה הזו יוצרת את חשבון השירות שנדרש כדי להמשיך בתהליך.

   <p>If the error is
     <code>The instance creation failed due to a permission error with the
       CMEK key defined</code>, review the
     <a href="/sql/docs/postgres/cmek#understanding_keys">key settings and location</a>.</td>
 </tr>
 
 <tr>
   <td>Export</td>
   <td>If you see this while trying to export a database to a
     Cloud Storage bucket, the transfer may be failing due to a bandwidth
     issue.</td>
   <td>The Cloud SQL instance may be located in a different region
       than the Cloud Storage bucket. Reading and writing data from one
       continent to another involves a lot of network usage, and can cause
       intermittent issues like this.</td>
 </tr>
 
 <tr>
   <td>Failover (automatic)</td>
   <td>An automatic failover operation can produce this error message when
   the service detects that the primary instance is still responsive.</td>
   <td>There is nothing to be done in this case. The failover won't occur
   because it isn't needed.</td>
 </tr>
 <tr>
   <td>Import</td>
   <td>The import file may contain statements which require the superuser
     role.</td>
   <td>Edit the file to remove any statements which require the superuser
     role.</td>
</tr>

ב-Cloud SQL נעשה שימוש גם בקבצים בינאריים של צד שלישי (לדוגמה, mysqld), שיכולים ליצור הודעות שגיאה לא ידועות. שגיאות כאלה הן פנימיות לקבצים הבינאריים של הצד השלישי ולא נכללות בהיקף של Cloud SQL. עם זאת, לפעמים אפשר למצוא שגיאה ספציפית יותר ב קבצי היומן של Cloud SQL בערך באותו הזמן.

בנוסף, לפעמים מדובר בקוד שגיאה לא ידוע. במקרה כזה, אפשר Unknown Error Codeלראות את ההודעה המלאה.