Backup-ların avtomatlaşdırılması — dişləri avtomatik təmizləmək kimidir, sadəcə sənin verilənlər bazan üçün. Müntəzəm backup prosesi dünyanı (bu halda — sənin datanı) fəlakətdən xilas edir. Heç kim istəmir ki, gecə saat 3-də serverin çökdüyü barədə mesaj alsın və başa düşsün ki, son backup iki həftə əvvəl olub. Avtomatlaşdırma bu problemi həll edir: artıq insan faktoruna görə data riskinə kompromis yoxdur.
Avtomatlaşdırma üçün bir çox alət var, amma bu gün ən populyar ikisini danışacağıq:
cron— Linux-da çoxdan tanınan və universal task scheduler-dir.pg_cron— PostgreSQL üçün extension-dur, hansı ki, task-ları birbaşa database serverindən işə salmağa imkan verir.
pg_cron arxa planda cron servisini çağırır. Bu servis yalnız Linux-da mövcuddur!
Başlayaq!
pg_cron-un quraşdırılması
pg_cron — PostgreSQL üçün extension-dur, hansı ki, avtomatik task-ların cədvəlini birbaşa database-də qurmağa imkan verir. Bu həm gözəldir, həm rahatdır və sənin PostgreSQL-i kiçik bir əməliyyat mərkəzinə çevirir.
Quraşdırma addımları:
- Əmin ol ki, PostgreSQL 10+ istifadə edirsən, çünki
pg_cronyalnız müasir versiyalarda dəstəklənir. Extension-u sisteminin paket meneceri ilə quraşdır. Məsələn, Ubuntu üçün:
sudo apt install postgresql-<version>-cron<version>-u öz sistemindəki PostgreSQL versiyası ilə əvəz elə.PostgreSQL konfiqurasiyasında extension-u aktiv et.
postgresql.conffaylını aç və əlavə et:shared_preload_libraries = 'pg_cron'Niyə lazımdır?
pg_crontələb edir ki, kitabxana PostgreSQL start zamanı yüklənsin — bu mütləqdir.PostgreSQL serverini yenidən başlad:
sudo systemctl restart postgresqlDatabase-də extension-u aktiv et:
CREATE EXTENSION pg_cron;
Bu mərhələdə pg_cron işləməyə hazırdır!
Backup-ların avtomatik yaradılması üçün task yaratmaq
pg_cron-un əsas fəndi — müəyyən vaxtda komandaları işə salmaq imkanıdır. Gəlin, pg_dump komandasını avtomatik yerinə yetirmək üçün task yaradaq.
Nümunə:
SELECT cron.schedule(
'gecelik_backup', -- task-ın adı
'0 2 * * *', -- cədvəl (hər gecə saat 2-də)
$$pg_dump -U username -F c -f /backups/university_backup.dump university$$ -- komanda
);
Bu magiyanı izah edək:
'gecelik_backup'— task üçün öz adındır, rahatlıqla tapmaq üçün.'0 2 * * *'— cron formatında cədvəl: hər gün saat 2:00-da.$$ $$içindəki komanda:pg_dumpiləuniversitybazasının backup-ı yaradılır.
Task yaradıldıqdan sonra o, cədvələ uyğun işləməyə başlayacaq!
pg_cron task-larına baxmaq və silmək
Bütün mövcud task-ları görmək üçün:
SELECT * FROM cron.job;
Əgər hansısa task artıq lazım deyilsə, onu belə silə bilərsən:
SELECT cron.unschedule(job_id);
job_id-u yuxarıdakı sorğudan çıxan task ID-si ilə əvəz elə.
cron ilə avtomatlaşdırmadan istifadə
Əgər sən klassik Linux yanaşmasını üstün tutursansa və ya pg_cron nədənsə əlçatan deyilsə, sənə kömək edəcək hər şeyə qadir cron.
cron ilə task qurmaq
Əvvəlcə əmin ol ki, cron quraşdırılıb və işləyir:
sudo systemctl enable cron
sudo systemctl start cron
İndi backup üçün task əlavə edək. cron task-larını düzəltmək üçün editoru aç:
crontab -e
Sətir əlavə et:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university
Bu sehrli sətir nə edir:
- Hər gün saat 2-də (
0 2 * * *)universitybazasının backup-ını yaradacaq. - Bütün backup-lar
/backups/university_backup.dumpfaylında saxlanacaq.
crontab faylını yadda saxladıqdan sonra planlaşdırılmış task işləməyə başlayacaq.
cron log-ları
Bəzən nə baş verdiyini bilmək faydalı olur. Komanda çıxışının log-fayla yazıldığına əmin ol. Bunun üçün komandaya çıxış yönləndirməsini əlavə et:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university >> /var/log/backup.log 2>&1
İndi task işləyərkən baş verən hər şey /var/log/backup.log faylında saxlanacaq.
pg_cron və cron müqayisəsi
Deməli, iki güclü alətimiz var. Hansını seçmək lazımdır?
pg_cronəladır, əgər task-ları birbaşa PostgreSQL-dən idarə etmək və cədvəl qurmaq istəyirsənsə. Rahatdır, database-dən çıxmağa ehtiyac yoxdur və task-ları böyütmək olur.crondaha universaldır. Onu təkcə PostgreSQL üçün yox, başqa task-ların avtomatlaşdırılması üçün də istifadə edə bilərsən.
| Xüsusiyyət | pg_cron | cron |
|---|---|---|
| İnteqrasiya rahatlığı | PostgreSQL-ə daxildir, amma extension tələb edir | İstənilən proses üçün işləyir |
| Quraşdırma | Extension-un quraşdırılması lazımdır | Əksər Linux sistemlərində daxili gəlir |
| Log-lar | PostgreSQL-də saxlanılır (cron.job_run_details cədvəli) |
Sistem log-larına yazılır (adətən /var/log/syslog) |
| Elastiklik | Yalnız PostgreSQL daxilində SQL icra edir | İstənilən komanda, script və binary-i işə sala bilər |
Task-ların icrasını yoxlamaq
Backup-un işlədiyinə əmin olmaq üçün cron komandasını əl ilə işə sala bilərsən:
pg_dump -U username -F c -f /backups/university_backup.dump university
Həmçinin backup fayllarının göstərilən qovluqda olub-olmadığını, ölçüsünü və son yaradılma vaxtını yoxlamaq faydalıdır. Məsələn:
ls -lh /backups/
Log-ları mütəmadi yoxla və task-ların düzgün işlədiyinə əmin ol.
Tipik səhvlərdən sadə qorunma
Səhv №1: "İcazələri unutmuşam!"
Əgər cron ilə işləyən istifadəçinin pg_dump icra etməyə icazəsi yoxdursa, task-lar işləməyəcək. İstifadəçinin database-ə çıxışı olduğuna əmin ol.
Səhv №2: "Fayl başqa yerə getdi!"
Həmişə fayl və komandalar üçün tam yolu göstər. cron sənin environment-in haqqında heç nə bilmir — tam yol mütləqdir: pg_dump -> /usr/bin/pg_dump.
Səhv №3: "Log-larım hanı?"
Komandanın çıxışını log-fayla yönləndirməyi unutma. Onsuz heç bir problem barədə məlumat almayacaqsan.
Bu mərhələdə artıq database-in üçün avtomatik backup yaratmağa hazırsan. İndi, hətta server qəfil tətildə olsa belə, dataların təhlükəsizdir!
GO TO FULL VERSION