Sobes.tech
Middle

Vim kimi xarici alətlərdən istifadə etmədən yalnız daxili mexanizmlərdən istifadə edərək PostgreSQL üçün ehtiyat nüsxələrinin yaradılmasını necə qurardınız?

sobes.tech Süni İntellekt

AI-dan cavab

Əlbəttə, mən bu suala cavab verməyə hazıram.

PostgreSQL-in daxili mexanizmlərindən istifadə etməklə ehtiyat nüsxələr yaratmaq üçün aşağıdakı yanaşmaları tətbiq edərdim:

  1. pg_dumppg_dumpall:

    • pg_dump tək bir verilənlər bazasının məntiqi ehtiyat nüsxəsini yaradır.
    • pg_dumpall bütün verilənlər bazalarının, o cümlədən sistem obyektlərinin (rol və cədvəl sahələri) məntiqi ehtiyat nüsxəsini yaradır.
    • Onlar bərpa üçün SQL təlimatları və ya ikili arxivləşdirilmiş fayl yaradır.
    • Üstünlüklər: İstifadə asanlığı, çıxış formatını seçməkdə çeviklik.
    • Dezavantajlar: Böyük verilənlər bazaları üçün məntiqi nüsxədən bərpa çox vaxt ala bilər. Davamlı ehtiyat nüsxələr (PITR) üçün uyğun deyil.

    pg_dump istifadə nümunəsi:

    # 'mydatabase' verilənlər bazasının mətn formatında məntiqi ehtiyat nüsxəsini yaradın:
    pg_dump mydatabase > mydatabase_backup.sql
    
    # 'mydatabase' verilənlər bazasının xüsusi formatda ehtiyat nüsxəsini yaradın:
    pg_dump -Fc mydatabase > mydatabase_backup.dump
    
    # Bütün verilənlər bazalarının ehtiyat nüsxəsini yaradın:
    pg_dumpall > all_databases_backup.sql
    
  2. Davamlı arxivləşdirmə və Point-in-Time Recovery (PITR):

    • wal_level, archive_modearchive_command parametrlərini postgresql.conf faylında aktivləşdirir.
    • Davamlı WAL fayllarının axını üçün imkan yaradır.
    • PITR üçün əsas nüsxə (məsələn, pg_basebackup ilə yaradılmış) və ardıcıl WAL faylları tələb olunur.
    • Üstünlüklər: Hər hansı bir zaman nöqtəsinə bərpa etmək imkanı, arxivləşdirmə zamanı performansa minimal təsir.
    • Dezavantajlar: Daha çox konfiqurasiya və WAL fayllarının saxlanması üçün idarəetmə tələb edir.

    postgresql.conf-də konfiqurasiya nümunəsi:

    # WAL arxivləşdirmə üçün konfiqurasiya
    wal_level = replica      # və ya daha yüksək, arxivləşdirmə üçün tələb olunur
    archive_mode = on        # WAL arxivləşmə rejimini aktivləşdirir
    archive_command = 'cp %p /path/to/wal_archive/%f'  # WAL fayllarını kopyalama əmri. '/path/to/wal_archive/' yerinə yol daxil edin.
    

    pg_basebackup istifadə nümunəsi:

    # `/path/to/base_backup` kataloqunda əsas nüsxə yaradın
    pg_basebackup -D /path/to/base_backup -F t -x -v
    
  3. Fiziki nüsxələr (File-level backup):

    • PostgreSQL-in məlumat fayllarını (PGDATA qovluğu) birbaşa kopyalama.
    • PostgreSQL-in dayandırılmasını və ya fayl sisteminin anlıq görüntülərindən istifadəni tələb edir.
    • İşləyən verilənlər bazası üçün ehtiyat nüsxə yaratmaq üçün uyğun deyil, əlavə alətlər tələb oluna bilər (məsələn, LVM snapshotları).
    • Üstünlüklər: Dayandırma zamanı kiçik verilənlər bazaları üçün sadə tətbiq.
    • Dezavantajlar: Serverin dayandırılması, işləyən serverdə məlumatların zədələnməsi riskinin yüksək olması.

Etibarlı və effektiv ehtiyat nüsxə strategiyası üçün, xüsusən də "savaş vəziyyətində" sistemlər üçün, pg_basebackup və davamlı WAL arxivləşdirmənin birləşməsini tövsiyə edərdim. Bu, minimal məlumat itkisi ilə bərpa etməyə və bərpa nöqtəsini seçməyə imkan verir. Məntiqi nüsxələr (pg_dump, pg_dumpall) isə fərdi verilənlər bazalarının ehtiyat nüsxəsini çıxarmaq və məlumat köçürmələri üçün istifadə oluna bilər, lakin genişmiqyaslı Fəlakət Bərpası (DR) üçün daha az effektivdir.

Ehtiyat nüsxə yaratma proseslərinin avtomatlaşdırılması üçün planlaşdırıcı, məsələn, cron, tələb oluna bilər, lakin nüsxə yaratma prosesi PostgreSQL-in daxili komandaları ilə həyata keçiriləcək.