CodeGym /Kurslar /SQL SELF /Linux-da pg_cron və cron ilə ...

Linux-da pg_cron və cron ilə backup-ların avtomatlaşdırılması

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

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:

  1. cron — Linux-da çoxdan tanınan və universal task scheduler-dir.
  2. 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ı:

  1. Əmin ol ki, PostgreSQL 10+ istifadə edirsən, çünki pg_cron yalnız müasir versiyalarda dəstəklənir.
  2. 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ə.

  3. PostgreSQL konfiqurasiyasında extension-u aktiv et. postgresql.conf faylını aç və əlavə et:

    shared_preload_libraries = 'pg_cron'
    

    Niyə lazımdır? pg_cron tələb edir ki, kitabxana PostgreSQL start zamanı yüklənsin — bu mütləqdir.

  4. PostgreSQL serverini yenidən başlad:

    sudo systemctl restart postgresql
    
  5. Database-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_dump ilə university bazası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 * * *) university bazasının backup-ını yaradacaq.
  • Bütün backup-lar /backups/university_backup.dump faylı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.

  • cron daha 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!

2
Tapşırıq
SQL SELF, səviyyə, dərs
Bağlanıb
`pg_cron` ilə avtomatik backup yaradılması
`pg_cron` ilə avtomatik backup yaradılması
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION