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.
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.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.Şə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.İnsan faktoru:
Etiraf et... kimsəDROP DATABASEedib? Ə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 -lkomandası ilə fayllarının ölçüsünü yoxla. Fayl şübhəli dərəcədə kiçikdirsə, problem ola bilər.filekomandası ilə faylı yoxla. Məsələn:
Fayl haqqında məlumat görməlisən, orada SQL dump olduğu yazılacaq.file backup_file.sql
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:
Əgər SQL backup-u (
pg_dump) istifadə edirsənsə: Bərpa üçün bu komandadan istifadə etpsql -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.
- Əgər binary backup (
pg_basebackupvə yapg_dumpiləcustom) istifadə edirsənsə:
Bərpa üçün istifadə et:
Diqqət et, bu backup-lar text formatında deyil, "paketlənmiş" məlumatlardır.pg_restore -U username -d new_database backup_file.dump
Əlavə olaraq:
- Backup-da yalnız məlumat varsa,
--data-onlyistifadə 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:
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).
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.sqlCə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:
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.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).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.
GO TO FULL VERSION