Categories
Database Backup

** Discover the hidden dangers of DIY database backup scripts. Learn why custom Bash scripts fail in production, the risks of logical dumps, and how to secure your data with enterprise solutions.

Hər bir Məlumat Bazası Administratoru (DBA) və Sistem Mühəndisi karyerasının bir nöqtəsində məlumat bazasını ehtiyat nüsxələmək üçün xüsusi shell skripti yazıb. Bu, demək olar ki, bir keçid mərasimidir. Layihənin ilkin mərhələlərində mysqldump və ya pg_dump əmrlərini gzip-ə yönləndirən sadə bir cron işi zərif, yüngül və qənaətcil bir həll kimi görünür.

Bununla belə, infrastruktur miqyaslandıqca, məlumat həcmləri artdıqca və işləmə müddəti (uptime) SLA-ları daha sərtləşdikcə, həmin 10 sətirlik Bash skripti sakitcə saatlı bombaya çevrilir. İstehsal mühitləri yüksək əlçatanlıq, ciddi Bərpa Nöqtəsi Məqsədləri (RPO) və sürətli Bərpa Zamanı Məqsədləri (RTO) tələb edir. Bu mühitlərdə DIY (özün-et) ehtiyat nüsxə skriptlərinə güvənmək məlumatların ardıcıllığı, gizli uğursuzluqlar, təhlükəsizlik boşluqları və idarəolunmaz bərpa prosesləri ilə bağlı ciddi risklər yaradır.

Bu məqalədə biz DIY məlumat bazası ehtiyat nüsxə skriptlərinin memarlıq qüsurlarını və gizli təhlükələrini təhlil edəcək, məntiqi və fiziki ehtiyat nüsxələrin texniki çatışmazlıqlarını araşdıracaq və missiya üçün kritik məlumatlarınızı qorumaq üçün CloudSave kimi müəssisə səviyyəli həllərə necə keçəcəyinizi müzakirə edəcəyik.

Sadəlik İllüziyası: Klassik DIY Skriptinin Təhlili

Təhlükəni başa düşmək üçün əvvəlcə tipik bir DIY ehtiyat nüsxə skriptinin anatomiyasına baxmalıyıq. MySQL məlumat bazası üçün standart yanaşma çox vaxt belə görünür:

#!/bin/bash
# Sadə DIY MySQL Ehtiyat Nüsxə Skripti
BACKUP_DIR="/mnt/backups"
DATE=$(date +%F)
DB_USER="admin"
DB_PASS="SuperSecret123!"

mysqldump -u $DB_USER -p$DB_PASS my_database | gzip > $BACKUP_DIR/mydb_$DATE.sql.gz

# 30 gündən köhnə ehtiyat nüsxələri sil
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +30 -exec rm {} ;

İlk baxışdan bu skript məqsədə çatır: məlumatları çıxarır, sıxır və saxlama müddətini idarə edir. Lakin səthin altında, bu, istehsal mühitində məlumat itkisinə səbəb olacaq kritik qüsurlarla doludur.

Təhlükə 1: Gizli Uğursuzluqlar və Boru (Pipe) Tələsi

DIY skriptlərinin ən hiyləgər təhlükələrindən biri gizli uğursuzluqdur. Yuxarıdakı skriptdə mysqldump əmri birbaşa gzip-ə yönləndirilir (|).

Bash-da konveyerin çıxış statusu konveyerdəki sonuncu əmrin çıxış statusudur. Əgər məlumat bazası serverinin yaddaşı tükənərsə, əlaqə kəsilərsə və ya dump prosesinin ortasında kilidli cədvəllə qarşılaşarsa, mysqldump uğursuz olacaq və xəta verəcək. Lakin gzip aldığı qismən çıxışı uğurla sıxacaq və 0 (uğurlu) status kodu ilə çıxacaq.

Cron işinin çıxış kodunu yoxlayan monitorinq sisteminiz uğurlu ehtiyat nüsxə barədə məlumat verəcək. Diskdə etibarlı .gz faylınız olacaq, lakin içərisində kəsilmiş, yararsız bir SQL faylı olacaq. Siz bunu kritik bir bərpa prosesinə cəhd edənə qədər kəşf etməyəcəksiniz.

Azaldılma (və onun limitləri)

Mühəndislər çox vaxt Bash-da ciddi xəta idarəetməsini aktivləşdirərək bunu düzəltməyə çalışırlar:

set -e
set -o pipefail

set -o pipefail konveyerdəki hər hansı əmr uğursuz olduqda skriptin uğursuz olmasını təmin etsə də, bu hələ də skript ətrafında möhkəm xəbərdarlıq, qeydiyyat (logging) və yenidən cəhd mexanizmləri qurmağınızı tələb edir. Şəbəkə xətası səbəbindən saat 02:00-da uğursuzluq baş verdikdə, DIY skripti sadəcə dayanır. Müəssisə platformaları bu müvəqqəti xətaları ağıllı, eksponensial artan yenidən cəhd mexanizmləri ilə idarə edir.

Təhlükə 2: Məlumat Ardıcıllığı və Kilidləmə Kabusları

DIY skriptləri əsasən məntiqi ehtiyat nüsxələrə (mysqldump, pg_dump) əsaslanır. Məntiqi ehtiyat nüsxələr bütün cədvəllər üzrə SELECT ifadələrini işlədərək məlumatları çıxarır. Yüksək tranzaksiyalı istehsal məlumat bazasında məlumatlar daim dəyişir. Əgər bir skript 100 GB-lıq məlumat bazasını dump etmək üçün 45 dəqiqə sərf edirsə, dump-un əvvəlindəki məlumatlar sonundakı məlumatlardan 45 dəqiqə daha köhnə olacaq və bu, ACID uyğunluğunu pozacaq.

MySQL Tranzaksiya Ardıcıllığı

InnoDB istifadə edərək MySQL-də ardıcıl bir snapshot əldə etmək üçün xüsusi bayraqlar daxil etməlisiniz:

mysqldump --single-transaction --quick --routines --events -u user -p db > dump.sql

--single-transaction bayrağı izolyasiya səviyyəsini REPEATABLE READ olaraq təyin edir və dump etməzdən əvvəl tranzaksiyanı başladır. Lakin, əgər məlumat bazanızda hələ də köhnə MyISAM cədvəlləri varsa, bu bayraq onların kilidlənməsinin qarşısını almayacaq və ehtiyat nüsxə işləyərkən istehsal oxuma/yazma trafikini dayandıra bilər. Bundan əlavə, ehtiyat nüsxə zamanı tərtibatçılar tərəfindən icra edilən hər hansı ALTER TABLE, DROP TABLE və ya RENAME TABLE ifadələri REPEATABLE READ snapshot-unu pozacaq və dump-un uğursuz olmasına səbəb olacaq.

PostgreSQL və WAL Arxivlənməsi

PostgreSQL üçün pg_dump ardıcıl məntiqi ehtiyat nüsxələr təmin edir, lakin yalnız məntiqi ehtiyat nüsxələr Zaman Nöqtəsi Bərpası (PITR) təmin edə bilməz. Əgər məlumat bazanız saat 16:00-da çökərsə və son cron skriptiniz gecə yarısı işləyibsə, 16 saatlıq məlumat itirirsiniz.

PITR-ə nail olmaq üçün Yazıdan Əvvəlki Jurnalların (WAL) davamlı arxivlənməsi tələb olunur. archive_command-ı təhlükəsiz idarə etmək üçün DIY skripti yazmaq çox çətindir.

# postgresql.conf
wal_level = replica
archive_mode = on
archive_command = 'test ! -f /mnt/wal_archive/%f && cp %p /mnt/wal_archive/%f'

Əgər təyinat yaddaşı (/mnt/wal_archive/) dolarsa və ya əlçatmaz olarsa, archive_command uğursuz olacaq. PostgreSQL daha sonra əsas disk dolana qədər WAL fayllarını yerli olaraq yığacaq və bu da tam məlumat bazası kəsilməsinə səbəb olacaq. DIY skriptləri nadir hallarda WAL yığılmasını izləmək və kəsilmə baş verməzdən əvvəl administratorlara xəbərdarlıq etmək üçün tələb olunan telemetriyaya malik olur.

Təhlükə 3: Saxlama Ruleti

İlkin skriptimizdəki saxlama əmrinə yenidən baxın:

find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +30 -exec rm {} ;

Bu, baş verməyi gözləyən fəlakətli bir məlumat itkisi hadisəsidir. Konfiqurasiya dəyişikliyinin mysqldump autentifikasiyasını pozduğu bir ssenarini təsəvvür edin. Skript yeni ehtiyat nüsxələr yarada bilmir, lakin find əmri hər gecə işləməyə davam edir və 30 gündən köhnə faylları vicdanla silir.

30 günlük gizli ehtiyat nüsxə uğursuzluqlarından sonra find əmri son qalan yaxşı ehtiyat nüsxənizi də siləcək. İndi əlinizdə sıfır ehtiyat nüsxə qalır.

CloudSave kimi müəssisə ehtiyat nüsxə proqramları vəziyyətə əsaslanan saxlama siyasətlərindən istifadə edir. O, “30 gündən köhnə ehtiyat nüsxələri sil” ilə “köhnə məlumatları təmizləməzdən əvvəl ən azı 30 uğurlu bərpa nöqtəsinin mövcud olduğundan əmin ol” arasındakı fərqi başa düşür.

Təhlükə 4: Təhlükəsizlik, Şifrələmə və Uyğunluq Kor nöqtələri

Ransomware və ciddi uyğunluq çərçivələri (GDPR, HIPAA, SOC 2) dövründə ehtiyat nüsxələr əsas hədəfdir. DIY skriptləri tez-tez təhlükəsizlik ən yaxşı təcrübələrini pozur:

  1. Kodlaşdırılmış Etimadnamələr: Məlumat bazası parollarını düz mətnli skriptlərdə və ya cron təriflərində saxlamaq böyük təhlükəsizlik riskidir. MySQL-in mysql_config_editor və ya PostgreSQL-in .pgpass faylı kimi alətlər bunu azaltsa da, onlar hələ də serverdə yerli açar fayllarını idarə etməyi tələb edir.
  2. Saxlanılan Yerdə Şifrələmənin Olmaması: Xam SQL-i diskə dump etmək həssas PII/PHI məlumatlarını ifşa edir.
  3. Mürəkkəb Şifrələmə Konveyerləri: GPG istifadə edərək ehtiyat nüsxələri uçuşda şifrələməyə çalışmaq ciddi CPU yükü və açar idarəetmə mürəkkəbliyi yaradır.
# DIY şifrələnmiş ehtiyat nüsxə konveyeri
pg_dump mydb | gzip | gpg --symmetric --cipher-algo AES256 --passphrase-file /etc/keys/backup.key > backup.sql.gz.gpg

Əgər serverə müdaxilə edilərsə, hücumçu həm şifrələnmiş ehtiyat nüsxəyə, həm də /etc/keys/backup.key faylına çıxış əldə edir və bu, şifrələməni yararsız edir. Bundan əlavə, əgər GPG açarını yaradan DBA şirkəti tərk edərsə və açar itərsə, ehtiyat nüsxələr bərpaolunmaz olur.

Təhlükə 5: RTO Reallıq Yoxlaması (Bərpa etmək ehtiyat nüsxələməkdən daha çətindir)

Ehtiyat nüsxənin son sınağı bərpadır. DIY skriptləri tərəfindən yaradılan məntiqi ehtiyat nüsxələrin bərpası çox yavaşdır. 500 GB-lıq SQL dump-un yaradılması 15 dəqiqə çəkə bilər, lakin onu bərpa etmək məlumat bazası mühərrikindən SQL-i təhlil etməyi, indeksləri yenidən qurmağı və məhdudiyyətləri yenidən hesablamağı tələb edir. Bu, saatlar və ya hətta günlər çəkə bilər, RTO-nuzu məhv edər.

Böyük istehsal məlumat bazaları üçün fiziki ehtiyat nüsxələr (faktiki məlumat fayllarının kopyalanması) məcburidir. Percona XtraBackup və ya pg_basebackup kimi alətlər mövcud olsa da, onları DIY Bash skriptlərinə bükmək çox mürəkkəbdir. Siz LVM snapshot-larını idarə etməli, fayl sisteminin sakitləşdirilməsini (quiescing) həyata keçirməli və ehtiyat nüsxənin şəbəkə interfeysini yükləmədən kənara ötürülməsini təmin etməlisiniz.

LVM Snapshot Tələsi

Bir çox mühəndis LVM snapshot-larından istifadə edərək “sıfır kəsilmə” fiziki ehtiyat nüsxələri etməyə çalışır:

# Snapshot yarat
lvcreate --size 20G --snapshot --name db_snap /dev/vg0/db_vol

# Mount et və kopyala
mount /dev/vg0/db_snap /mnt/snap
tar -czf /backups/db_physical.tar.gz /mnt/snap/mysql

Əgər məlumat bazası yazma I/O-da qəfil artım yaşayarsa, 20G LVM snapshot-u dərhal dolub bilər. LVM snapshot-u dolduqda, o, yararsız olur və ehtiyat nüsxə uğursuz olur. Daha da pisi, intensiv istifadə olunan LVM snapshot-ları əsas məlumat bazası həcminin I/O performansını ciddi şəkildə aşağı sala bilər və tətbiq gecikmələrinə səbəb ola bilər.

Müəssisə Səviyyəli Qorumaya Keçid

DIY skriptlərindən müəssisə platformasına keçid hər hansı infrastruktur komandası üçün kritik bir yetkinlik mərhələsidir. Məqsəd “skriptin işləyəcəyinə ümid etmək”dən bərpaolunma qabiliyyətinin kriptoqrafik sübutuna sahib olmağa keçməkdir.

CloudSave kimi platformalar xüsusilə DIY skriptlərinin kor nöqtələrini aradan qaldırmaq üçün mühəndislik edilmişdir. Tətbiqə uyğun agentləri yerləşdirməklə, CloudSave cədvəlləri kilidləmədən və ya performansı aşağı salmadan ardıcıl fiziki və məntiqi ehtiyat nüsxələri təşkil etmək üçün birbaşa məlumat bazası API-ləri (MySQL, PostgreSQL, MS SQL, Oracle) ilə qarşılıqlı əlaqədə olur.

Skriptlərdən Uzaqlaşmağın Əsas Üstünlükləri:

  1. Avtomatlaşdırılmış Yoxlama: Müasir platformalar sadəcə ehtiyat nüsxə götürmür; onları sınaqdan keçirir. CloudSave avtomatik olaraq müvəqqəti məlumat bazası nümunəsi işə sala, ehtiyat nüsxəni bərpa edə, ardıcıllıq yoxlamalarını (məsələn, DBCC CHECKDB) icra edə və ehtiyat nüsxənin həqiqətən istifadəyə yararlı olduğuna dair təsdiqlənmiş hesabat təqdim edə bilər.
  2. Dəyişməz (Immutable) Yaddaş: Ransomware ilə mübarizə aparmaq üçün ehtiyat nüsxələr dəyişməz olmalıdır. DIY skriptləri WORM (Bir dəfə yaz, çox oxu) yaddaşına asanlıqla yaza bilmir. Müəssisə həlləri S3 Object Lock və dəyişməz bulud yaddaşı ilə yerli olaraq inteqrasiya olunur ki, bu da server tamamilə müdaxiləyə məruz qalsa belə, ehtiyat nüsxələrin hücumçu tərəfindən silinə və ya şifrələnə bilməməsini təmin edir.
  3. Sadələşdirilmiş PITR: Mürəkkəb recovery.conf və ya postgresql.auto.conf parametrlərindən istifadə edərək əsas ehtiyat nüsxəni və yüzlərlə WAL faylını əllə birləşdirmək əvəzinə, platformalar vizual zaman qrafiki təqdim edir. Siz sadəcə bərpa etmək istədiyiniz dəqiq vaxtı seçirsiniz və proqram jurnalın təkrarını avtomatik idarə edir.
  4. Deduplikasiya və Sıxılma: DIY skriptləri hər faylı ayrı-ayrılıqda sıxan gzip-ə güvənir. Müəssisə ehtiyat nüsxə proqramı qlobal blok səviyyəsində deduplikasiyadan istifadə edir, bu da ehtiyat nüsxələri kənara köçürərkən yaddaş xərclərini və şəbəkə bant genişliyini kəskin şəkildə azaldır.

Nəticə

Məlumat bazasını ehtiyat nüsxələmək üçün xüsusi Bash skripti yazmaq asandır. Gizli konveyer uğursuzluqlarını idarə edən, ACID ardıcıllığına zəmanət verən, kriptoqrafik açarları təhlükəsiz idarə edən, saxlama müddətinə əsaslanan məlumat itkisinin qarşısını alan və ciddi RTO/RPO SLA-larına zəmanət verən bir skript yazmaq isə demək olar ki, qeyri-mümkündür.

İstehsal mühitlərində məlumat bazası biznesin ən kritik aktividir. Onun qorunmasına bir neçə yüz sətirlik shell skripti ilə saxlanılan yan layihə kimi yanaşmaq heç bir müəssisənin ödəyə bilməyəcəyi bir riskdir. Mövcud ehtiyat nüsxə strategiyalarınızı audit etməklə, məntiqi dump-ların məhdudiyyətlərini başa düşməklə və CloudSave kimi möhkəm, avtomatlaşdırılmış platformalara keçməklə, DevOps və DBA komandaları xüsusi skriptlərin “avtobus faktorunu” aradan qaldıra və məlumatlarının həqiqətən davamlı olmasını təmin edə bilərlər.

Kateqoriyalar