CodeGym /Kurslar /SQL SELF /Məlumatların bərpası qəza sonrası

Məlumatların bərpası qəza sonrası

SQL SELF
Səviyyə , Dərs
Mövcuddur

Qəzalar müxtəlif olur: hardware nasazlıqları, elektrik kəsilməsi, kodda səhvlər və ya, tez-tez rast gəlinən, "köhnə bir şeyi" silmək istəyən səhlənkar admin tərəfindən bazanın təsadüfən silinməsi. Belə hallarda backup-lar və düzgün işlənmiş bərpa prosesi sənin "sehrli çubuğun" olur.

Gəlin bərpa prosesini addım-addım IKEA şkafı yığırmış kimi araşdıraq: panikasız və tam təlimata uyğun.

Addım 1. Qəzanın səbəbini analiz et

Məlumatları bərpa etməyə tələsənə qədər, əvvəlcə baş verənləri başa düşmək vacibdir.

  1. Tətbiq və ya database səhvi?
    Tətbiqinin və PostgreSQL-in log-larını yoxla (adətən onları /var/log/postgresql/ və ya OS-dən asılı olaraq oxşar qovluqda tapmaq olar). Səhv indikatorlarını axtar.

  2. Hardware nasazlığı?
    Əgər server fiziki olaraq zədələnibsə (məsələn, hard disk problemi), əvvəlcə avadanlığın işlək olduğuna əmin ol. Disk zədələnibsə, başqa bir disk qoş və hər şeyi ondan bərpa et.

  3. Şəbəkə və ya giriş problemləri?
    Əgər qəza şəbəkə ilə bağlıdırsa — serverin hələ bərpa əməliyyatlarına ehtiyacı yoxdur.

  4. İnsan faktoru:
    Etiraf et... kimsə DROP DATABASE edib? Əgər belədirsə, backup-dan məlumatları bərpa etmək üçün hələ şansımız var.

Unutma, qəzanın səbəbini dəqiq başa düşmək gələcəkdə onun qarşısını almağa kömək edəcək.

Addım 2. Backup-ların əlçatanlığını yoxla

İndi düzgün backup-ımızın olub-olmadığına əmin olmağın vaxtıdır. pg_dump və ya pg_basebackup ilə yaratdığın son backup-ları tap. Onların bütövlüyünü yoxla. Necə edəcəyini bilmirsənsə, qısa xatırlatma:

  • ls -l komandası ilə fayllarının ölçüsünü yoxla. Fayl şübhəli dərəcədə kiçikdirsə, problem ola bilər.
  • file komandası ilə faylı yoxla. Məsələn:
    file backup_file.sql
    
    Fayl haqqında məlumat görməlisən, orada SQL dump olduğu yazılacaq.

tar arxivi üçün çıxarıla biləcəyini yoxla:

tar -tf backup.tar

Səhv yoxdursa? Əla! Davam edə bilərik.

Addım 3. PostgreSQL-i dayandır

Bərpaya başlamazdan əvvəl PostgreSQL serverini dayandırmaq vacibdir ki, proses təhlükəsiz olsun. Bunu aşağıdakı komanda ilə edə bilərsən (server admini olaraq):

sudo systemctl stop postgresql

Bazanın dayandırılması bərpa prosesinə heç bir prosesin mane olmamasını təmin edir.

Addım 4. Bərpa üçün yeni database hazırla

Əgər database tamamilə silinibsə və ya zədələnibsə, əvvəlcə onu yenidən yarat. Komanda nümunəsi:

createdb -U postgres new_database

new_database yerinə öz database adını yaz.

Addım 5. Backup-u bərpa et

İki əsas bərpa ssenarisinə baxaq:

  1. Əgər SQL backup-u (pg_dump) istifadə edirsənsə: Bərpa üçün bu komandadan istifadə et

    psql -U username -d new_database -f backup_file.sql
    
  • username — PostgreSQL istifadəçi adın.
  • new_database — məlumatların import olunacağı database.
  • backup_file.sql — backup faylın.
  1. Əgər binary backup (pg_basebackup və ya pg_dump ilə custom) istifadə edirsənsə:
    Bərpa üçün istifadə et:
    pg_restore -U username -d new_database backup_file.dump
    
    Diqqət et, bu backup-lar text formatında deyil, "paketlənmiş" məlumatlardır.

Əlavə olaraq:

  • Backup-da yalnız məlumat varsa, --data-only istifadə et.
  • Yalnız struktur bərpa etmək lazımdırsa, --schema-only əlavə et.

Addım 6. PostgreSQL-i işə sal və test et

Bərpa komandasını icra etdikdən sonra serveri işə sal:

sudo systemctl start postgresql

İndi testlər aparmaq lazımdır. psql və ya pgAdmin ilə bərpa olunmuş database-ə qoşulmağa çalış. Bir neçə seçim sorğusu icra et, məlumatların düzgünlüyünü yoxla:

SELECT * FROM your_table_name LIMIT 10;

Hər şey normaldırsa, təbriklər: məlumatlar bərpa olundu!

Addım 7. Məlumatların bütövlüyünü yoxla

Bərpadan sonra məlumatların bütöv olduğuna əmin olmaq vacibdir. Məsələn:

  1. Cədvəllərdəki sətir sayını backup-la müqayisə et:

    SELECT COUNT(*) FROM your_table_name;
    

    Nəticəni backup-dakı qeydlərlə müqayisə et (əgər varsa).

  2. Kontrol summalardan istifadə et: Əgər əvvəllər cədvəllər üçün kontrol summa yaratmışdınsa, indi onları yoxlamağın vaxtıdır:

    md5sum backup_file.sql
    
  3. Cədvəllər arası əlaqələri yoxla: Bərpa olunan FOREIGN KEY əlaqələrinin düzgün işlədiyinə əmin ol.

Addım 8. Tətbiqi test et

İndi bu database-dən istifadə edən tətbiqinin işləkliyini yoxla. Əsas ssenariləri yoxla. Səhvlər varmı? Hər şey düzgün görünür?

Real bərpa səhvlərinin nümunələri

İndi bir neçə case-ə baxaq ki, problemlərin qarşısını necə almaq olar:

  1. PostgreSQL versiya uyğunsuzluğu.
    Təsəvvür et, backup versiya 12-də alınıb, amma server 15-ə yenilənib. Bərpa zamanı səhvlərlə qarşılaşacaqsan.
    Həll: backup-u hansı versiyada almısansa, həmin versiyada bərpa et, ya da uyğunluq üçün sənədlərə bax: PostgreSQL Documentation.

  2. Zədələnmiş backup . Əgər backup zədələnibsə, bəzi məlumatlar itə bilər.
    Həll: backup-ların replikasiyasından istifadə et (məsələn, bir neçə versiyanı saxla).

  3. Konkret cədvəlin bərpasında səhv.
    Əgər konkret cədvəli bərpa edirsənsə, amma digər asılılıqlar (məsələn, xarici açarlar) yoxdur, proses səhvlə bitə bilər.
    Həll: həmişə cədvəlləri düzgün ardıcıllıqla, əvvəlcə parent-lərdən başla.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION