שחזור בזמן נקודתי (PITR) בפוסטגרסQL

שחזור בזמן (PITR) הוא תכונה חזקה ב-PostgreSQL שהפכה ליעילה ומסודרת יותר עם הגעתו של PostgreSQL. היא מאפשרת למנהלים לשחזר מסד נתונים של PostgreSQL לרגע ספציפי בעבר. זה שימושי במיוחד אם אתה מנהל שחזור מאסון למערכת גדולה עם עומס עסקות גדול.

בלוג זה יחקר את PITR ויתמצג אותך בידע על פוטנציאל הכשלים ופתרונותיהם, כדי להבטיח יישום חלק ומוצלח. נשתף גם את היתרונות המרכזיים שלו ונתאר יישום של PostgreSQL שלב אחר שלב.

מרכיבים מרכזיים

יישום PITR כולל שני מרכיבים מרכזיים:

1. גיבוי בסיסי

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

2. יומני כתיבה מוקדמים (WAL)

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

מדוע להשתמש ב-PITR?

PITR מועיל במספר תרחישים:

ביטול שינויים בלתי מכוונים

פעולות מקריות, כגון פקודת DELETE או DROP ללא סעיף WHERE, יכולות להוביל לאובדן נתונים משמעותי. עם PITR, אתה יכול לשחזר את מסד הנתונים למצב לפני הטעות, תוך שמירה על נתונים קריטיים.

שחזור מאובדן נתונים

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

שחזור לצורך ניסוי או דיבוג

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

שחזור אסונות

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

שימוש יעיל במשאבים

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

מה חדש ב-PostgreSQL 17 עבור PITR?

PostgreSQL 17 מציגה מספר שיפורים עבור PITR, המתמקדים בביצועים, שימושיות והתאמה:

סנכרון שקעים של פיילואו

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

דחיסת WAL משודרגת

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

מהירות שחזור מהירה יותר

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

שיפור תאימות עם שכפול לוגי

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

שליטה גרנולרית על ארכוב WAL

PostgreSQL 17 מציע יותר שליטה על ארכוב WAL, ומאפשר לך לדייק את מדיניות השימור כך שתתאים לדרישות השחזור.

צעדים מפורטים לביצוע PITR ב-PostgreSQL

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

  • ארכוב WAL: הפעל והגדר ארכוב WAL.
  • גיבוי בסיסי: קח גיבוי בסיסי מלא באמצעות pg_basebackup או pgBackRest.
  • אחסון מאובטח: ודא שהגיבויים וקבצי WAL מאוחסנים בצורה מאובטחת, עדיף מחוץ לאתר.

1. הגדר ארכוב WAL

ארכוב WAL הוא קריטי עבור PITR מכיוון שהוא שומר את השינויים ההדרגתיים בין הגיבויים. כדי להגדיר ארכוב WAL, עדכן את הקובץ postgresql.conf, והגדר:

Shell

 

לאחר מכן, לאחר הגדרת פרמטרי הקונפיגורציה, הפעל מחדש את שרת PostgreSQL:

Shell

 

בדוק את מצב ארכוב WAL עם הפקודה הבאה:

SQL

 

חפש כל שגיאה ב-view pg_stat_archiver או ביומני PostgreSQL.

2. בצע גיבוי בסיסי

קח גיבוי בסיסי שישמש כנקודת התחלה עבור PITR; באמצעות pg_basebackup, הפקודה היא בצורה:

Shell

 

זה יוצר תמונת מצב עקבית של מסד הנתונים ומבטיח כי קבצי WAL נשמרים עבור התאוששות.

3. אמת את שלמות הגיבוי

השתמש ב-pg_verifybackup כדי לאמת את שלמות הגיבוי שלך:

Shell

 

4. הדגם כישלון

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

Shell

 

5. שחזר את הגיבוי הבסיסי

לפני שחזור הגיבוי הבסיסי, עצור את שרת PostgreSQL:

Shell

 

אז, השתמש בפקודה הבאה כדי לשנות את שם ספריית הנתונים הקיימת:

Shell

 

לאחר מכן, החלף את ספריית הנתונים עם הגיבוי הבסיסי:

Shell

 

עדכן את ההרשאות על ספריית הנתונים:

Shell

 

6. הגדר התאוששות

כדי לאפשר מצב התאוששות, עליך קודם ליצור קובץ recovery.signal בתוך ספריית הנתונים של PostgreSQL:

Shell

 

לאחר מכן, עדכן את postgresql.conf, והוסף את הפרמטרים הבאים:

Shell

 

7. הפעל את PostgreSQL במצב התאוששות

הפעל מחדש את שרת PostgreSQL עם הפקודה:

Shell

 

עקוב אחרי היומנים כדי לבדוק את התקדמות ההתאוששות:

Shell

 

PostgreSQL יצא באופן אוטומטי ממצב התאוששות ויהפוך לפעיל כאשר ההתאוששות הושלמה.

8. אימות התאוששות

לאחר התאוששות, יש לאמת את מצב בסיס הנתונים:

SQL

 

התמודדות עם בעיות פוטנציאליות

קבצי WAL חסרים או פגומים

בעיה

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

פתרון

  • ודאו שהגיבויים וארכיוני ה-WAL מאומתים באופן קבוע באמצעות כלים כמו pg_verifybackup.
  • השתמשו באחסון רדונדנטי עבור ארכיוני WAL.

מטרה לא נכונה להתאוששות

בעיה

ההתאוששות נעצרת במצב לא מכוון.

פתרון

  • בדקו שוב את recovery_target_time, recovery_target_lsn או recovery_target_name.
  • השתמשו בpg_waldump כדי לבדוק את קבצי ה-WAL עבור אירועי מטרה.

צווארי בקבוק בביצועים במהלך התאוששות

בעיה

ההתאוששות לוקחת יותר מדי זמן בגלל קבצי WAL גדולים.

פתרון

  • אופטימיזציה של ביצועי ההתאוששות על ידי הגדלת maintenance_work_mem וmax_parallel_workers.
  • השתמשו בדחיסת WAL כדי להפחית את גודל הקובץ.

בעיות סטיית שעון

בעיה

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

פתרון

סנכרנו את שעוני השרת באמצעות כלים כמו NTP.

ארכוב WAL לא מוגדר כראוי

בעיה

פקודת archive_command לא נכונה גורמת לכישלונות בארכיון WAL.

פתרון

  • בדוק את archive_command ידנית: cp /path/to/test_wal /path/to/wal_archive/.
  • וודא הרשאות מספקות לתיקיית הארכיון.

שיטות עבודה מומלצות עבור PITR

  1. אוטומט גיבויים: השתמש בכלים כמו pgBackRest או Barman לגיבויים מתוזמנים וארכיון WAL.
  2. נטר את ארכיון WAL: בדוק באופן קבוע את pg_stat_archiver עבור בעיות.
  3. אמת גיבויים: תמיד אמת את שלמות הגיבוי באמצעות pg_verifybackup.
  4. בדוק הליכי שחזור: סימולציה קבועה של תרחישי שחזור כדי להבטיח מוכנות.
  5. הגן על ארכיוני WAL: עבור ארכיוני WAL, השתמש באחסון מאובטח, כפול, כגון שירותי ענן או דיסקים מוגדרים RAID.

סיכום

שחזור בזמן (PITR) הוא קריטי לשמירה על אמינות מסד הנתונים ולהפחתת אובדן נתונים במקרה של אירוע. השיפורים של pgEdge ו-PostgreSQL 17 הופכים את PITR למהיר, יעיל ולקל יותר לניהול, במיוחד עבור מערכות בקנה מידה גדול או בעלות זמינות גבוהה.

מעקב אחרי הצעדים ושיטות העבודה המומלצות במדריך זה יעזור לך ליישם ולנהל PITR בצורה יעילה בסביבות PostgreSQL שלך. בדיקות ומעקב קבועים הם חיוניים כדי להבטיח שתהליכי השחזור זמינים כאשר אתה זקוק להם ביותר.

Source:
https://dzone.com/articles/point-in-time-recovery-pitr-in-postgresql