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.

Maamule kasta oo Database ah (DBA) iyo Injineerka Nidaamyada ayaa, mar uun noloshooda xirfadeed, qoray qoraal (script) gaar ah oo lagu kaydiyo database-ka. Tani waa wax ku dhow inay noqoto caado soo jireen ah. Marxaladaha hore ee mashruuca, shaqo fudud oo cron ah oo fulinaysa mysqldump ama pg_dump oo loo sii mariyo gzip waxay u muuqataa xal qurux badan, fudud, oo kharash-ool ah.

Si kastaba ha ahaatee, marka kaabayaasha dhaqaalaha ay weynaadaan, mugga xogtu uu kordho, iyo heshiisyada heerka adeegga (SLAs) ay adkaadaan, qoraalka Bash-ka ee 10-ka sadar ah wuxuu si aamusnaan ah isu beddelaa bambo waqtigeedu socdo. Deegaannada wax-soo-saarka waxay u baahan yihiin helitaan sare, Ujeedooyin Heerka Soo-kabashada (RPO) oo adag, iyo Ujeedooyin Wakhtiga Soo-kabashada (RTO) oo degdeg ah. Ku tiirsanaanta qoraallada kaydinta ee DIY ee deegaannadan waxay keenaysaa khataro daran oo la xiriira joogtaynta xogta, guuldarrooyinka aamusan, nuglaanshaha amniga, iyo hababka soo kabashada ee aan la maamuli karin.

Maqaalkan, waxaan ku falanqeyn doonaa cilladaha naqshadeynta iyo khataraha qarsoon ee qoraallada kaydinta database-ka ee DIY, waxaan sahamin doonaa dhibaatooyinka farsamo ee kaydinta macquulka ah (logical) iyo kuwa jireed (physical), waxaana ka wada hadli doonaa sida loogu gudbi karo xalalka heerka ganacsi sida CloudSave si loo ilaaliyo xogtaada muhiimka ah.

Dhalanteedka Fudaydka: Falanqaynta Qoraalka DIY ee Caadiga ah

Si aan u fahamno khatarta, waa inaan marka hore eegnaa qaab-dhismeedka qoraalka kaydinta DIY ee caadiga ah. Habka caadiga ah ee database-ka MySQL inta badan wuxuu u eg yahay sidan:

#!/bin/bash
# Qoraalka Kaydinta MySQL ee DIY ee Fudud
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

# Tirtir kaydadka ka weyn 30 maalmood
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +30 -exec rm {} ;

Marka hore, qoraalkani wuxuu gaarayaa hadafkii: wuxuu soo saarayaa xogta, wuu isku soo ururinayaa, wuxuuna maamulayaa kaydinta. Laakiin dusha hoose, waxaa ka buuxa cillado halis ah oo ugu dambeyntii horseedi doona luminta xogta ee deegaanka wax-soo-saarka.

Khatarta 1: Guuldarrooyinka Aamusan iyo Dabinka Tuubada (Pipe Trap)

Mid ka mid ah khataraha ugu daran ee qoraallada DIY waa guuldarada aamusan. Qoraalka kor ku xusan, amarka mysqldump waxaa si toos ah loogu sii marinayaa (|) gzip.

Bash, heerka bixitaanka ee tuubada (pipeline) waa heerka bixitaanka ee amarka ugu dambeeya ee tuubada. Haddii server-ka database-ku uu ka dhammaado xusuusta, uu jaro xiriirka, ama uu la kulmo miis qufulan inta lagu jiro dump-ka, mysqldump wuu fashilmi doonaa wuxuuna tuuri doonaa qalad. Si kastaba ha ahaatee, gzip wuxuu si guul leh u soo ururin doonaa wax soo saarka qaybta ah ee uu helay wuxuuna ka bixi doonaa koodhka heerka 0 (guul).

Nidaamkaaga kormeerka, oo hubinaya koodhka bixitaanka ee shaqada cron, wuxuu soo sheegi doonaa kaydin guulaysatay. Waxaad yeelan doontaa fayl .gz ah oo sax ah oo ku jira diskiga, laakiin gudaha waxaa ku jiri doona fayl SQL ah oo aan dhammaystirnayn oo aan waxtar lahayn. Ma ogaan doontid tan ilaa aad isku daydo soo celin muhiim ah.

Yaraynta (iyo xadkeeda)

Injineeradu inta badan waxay isku dayaan inay tan ku hagaajiyaan iyagoo awood u siinaya maaraynta qaladka adag ee Bash:

set -e
set -o pipefail

In kasta oo set -o pipefail uu hubinayo in qoraalku fashilmo haddii kasta oo amar ah oo ku jira tuubada uu fashilmo, haddana waxay weli u baahan tahay inaad dhisto digniin adag, diiwaangelin, iyo habab dib-u-isku-day ah oo ku xeeran qoraalka. Marka qalad shabakad ku meel gaar ah uu keeno guuldarro 2:00 subaxnimo, qoraalka DIY si fudud ayuu u dhimanayaa. Goobaha ganacsiga waxay ku maareeyaan khaladaadkan ku meel gaarka ah dib-u-isku-day caqli-gal ah.

Khatarta 2: Joogtaynta Xogta iyo Riyada Qufulka

Qoraallada DIY waxay si weyn ugu tiirsan yihiin kaydinta macquulka ah (mysqldump, pg_dump). Kaydinta macquulka ah waxay soo saartaa xogta iyadoo socodsiinaysa bayaannada SELECT ee dhammaan miisaska. Database-ka wax-soo-saarka ee aadka u ganacsiga badan, xogtu si joogto ah ayay isu beddeshaa. Haddii qoraalku qaato 45 daqiiqo si uu u dump-gareeyo database 100GB ah, xogta bilowga dump-ka waxay noqon doontaa 45 daqiiqo ka hor xogta dhammaadka, taas oo jebinaysa u hoggaansanaanta ACID.

Joogtaynta Ganacsiga ee MySQL

Si loo gaaro sawir joogto ah (snapshot) gudaha MySQL iyadoo la isticmaalayo InnoDB, waa inaad gudbisaa calaamado gaar ah:

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

Calaamadda --single-transaction waxay dejinaysaa heerka go’doominta REPEATABLE READ waxayna bilaabaysaa macaamil ka hor inta aan la dump-gareyn. Si kastaba ha ahaatee, haddii database-kaagu uu weli ka kooban yahay miisaska MyISAM ee duugga ah, calaamadani kama hortagi doonto inay qufulmaan, taas oo suurtogal ah inay joojiso taraafikada akhrinta/qorista ee wax-soo-saarka inta kaydintu socoto. Intaa waxaa dheer, wixii ALTER TABLE, DROP TABLE, ama RENAME TABLE ah oo ay fuliyaan horumariyayaashu inta lagu jiro kaydinta waxay jebin doonaan sawirka REPEATABLE READ, taas oo keeni doonta in dump-ku fashilmo.

PostgreSQL iyo Kaydinta WAL

PostgreSQL, pg_dump wuxuu bixiyaa kaydinta macquulka ah ee joogtada ah, laakiin kaydinta macquulka ah oo keliya ma bixin karto Soo-kabashada Waqtiga-Dhibicda (PITR). Haddii database-kaagu uu burburo 4:00 galabnimo oo qoraalkaaga cron ee ugu dambeeyay uu socday saq dhexe, waxaad luminaysaa 16 saacadood oo xog ah.

Gaarista PITR waxay u baahan tahay kaydinta joogtada ah ee Log-yada Qorista-Hore (WAL). Qorista qoraal DIY ah si loo maareeyo archive_command si ammaan ah waa mid aad u adag.

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

Haddii kaydinta meesha loo socdo (/mnt/wal_archive/) ay buuxsanto ama ay noqoto mid aan la heli karin, archive_command wuu fashilmi doonaa. PostgreSQL ka dib wuxuu ku kaydin doonaa faylasha WAL gudaha ilaa diskiga koowaad uu ka buuxsamo, taas oo keeni doonta burbur dhammaystiran oo database-ka ah. Qoraallada DIY dhif ayay leeyihiin telemetriga loo baahan yahay si loola socdo ururinta WAL oo looga digayo maamulayaasha ka hor inta aanu burburku dhicin.

Khatarta 3: Roulette-ka Kaydinta

Dib u eeg amarka kaydinta ee qoraalkayaga bilowga ah:

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

Tani waa dhacdo luminta xogta oo musiibo ah oo sugaysa inay dhacdo. Bal qiyaas xaalad uu isbeddel qaabeynta ahi jebiyo xaqiijinta mysqldump. Qoraalku wuu ku guuldareystaa inuu abuuro kayd cusub, laakiin amarka find wuxuu sii wadaa inuu socdo habeen kasta, isagoo si daacad ah u tirtiraya faylasha ka weyn 30 maalmood.

Ka dib 30 maalmood oo guuldarrooyin kaydin aamusnaan ah, amarka find wuxuu tirtiri doonaa kaydkaaga ugu dambeeya ee wanaagsan. Hadda waxaad ku hadhay eber kayd ah.

Software-ka kaydinta ganacsiga sida CloudSave wuxuu isticmaalaa siyaasado kaydin oo gobolaysan. Wuxuu fahamsan yahay farqiga u dhexeeya “tirtir kaydadka ka weyn 30 maalmood” iyo “hubi in ugu yaraan 30 dhibcood oo soo kabasho oo guulaysatay ay jiraan ka hor inta aan la goyn xogta duugga ah.”

Khatarta 4: Amniga, Sirta, iyo Meelaha Indho-la’aanta ee U hoggaansanaanta

Xilliga ransomware-ka iyo qaab-dhismeedyada u hoggaansanaanta adag (GDPR, HIPAA, SOC 2), kaydadku waa bartilmaameedka ugu horreeya. Qoraallada DIY waxay inta badan jebiyaan hababka ugu wanaagsan ee amniga:

  1. Aqoonsiyada Adag (Hardcoded): Kaydinta furaha sirta ah ee database-ka ee qoraallada qoraalka cad ama qeexitaannada cron waa khatar amni oo weyn. In kasta oo qalabka sida mysql_config_editor ee MySQL ama faylka .pgpass ee PostgreSQL ay tan yareeyaan, haddana waxay weli u baahan yihiin maaraynta faylasha furaha maxalliga ah ee server-ka.
  2. La’aanta Sirta ee Nasashada: Dump-gareynta SQL-ka ceeriin ee diskiga waxay ka dhigaysaa PII/PHI xasaasi ah mid soo shaac baxay.
  3. Tuubooyinka Sirta ee Adag: Isku dayga in la sir-geliyo kaydadka inta lagu jiro duulimaadka iyadoo la isticmaalayo GPG waxay keenaysaa culays CPU oo daran iyo kakanaanta maaraynta furaha.
# Tuubada kaydinta sirta ah ee DIY
pg_dump mydb | gzip | gpg --symmetric --cipher-algo AES256 --passphrase-file /etc/keys/backup.key > backup.sql.gz.gpg

Haddii server-ka la jabsado, weeraryahanku wuxuu helayaa marin u helidda labadaba kaydka sirta ah iyo faylka /etc/keys/backup.key, taas oo ka dhigaysa sirta mid aan waxtar lahayn. Intaa waxaa dheer, haddii DBA-ga soo saaray furaha GPG uu ka tago shirkadda oo furaha la waayo, kaydadku waa kuwo aan la soo celin karin.

Khatarta 5: Hubinta Xaqiiqada RTO (Soo celintu way ka adag tahay Kaydinta)

Imtixaanka ugu dambeeya ee kaydinta waa soo celinta. Kaydinta macquulka ah ee ay soo saaraan qoraallada DIY waxay caan ku yihiin inay gaabiyaan soo celinta. 500GB SQL dump ah waxaa laga yaabaa inay qaadato 15 daqiiqo in la abuuro, laakiin soo celinteeda waxay u baahan tahay mashiinka database-ka inuu parse-gareeyo SQL-ka, dib u dhiso tusmooyinka, oo dib u xisaabiyo xaddidaadaha. Tani waxay qaadan kartaa saacado ama xitaa maalmo, taas oo baabi’inaysa RTO-gaaga.

Database-yada wax-soo-saarka ee waaweyn, kaydinta jireed (nuqul ka qaadista faylasha xogta dhabta ah) waa qasab. In kasta oo qalabka sida Percona XtraBackup ama pg_basebackup ay jiraan, ku duubista qoraallada Bash ee DIY waa mid aad u adag. Waa inaad maamushaa sawirrada LVM, maamushaa faylka nidaamka quiescing, oo hubisaa in kaydinta loo wareejiyo meel ka baxsan goobta iyada oo aan la buuxin interface-ka shabakadda.

Dabinka Sawirka LVM

Injineero badan ayaa isku daya kaydinta jireed ee “zero downtime” iyagoo isticmaalaya sawirrada LVM:

# Abuur sawir
lvcreate --size 20G --snapshot --name db_snap /dev/vg0/db_vol

# Buuri oo nuqul ka qaado
mount /dev/vg0/db_snap /mnt/snap
tar -czf /backups/db_physical.tar.gz /mnt/snap/mysql

Haddii database-ku uu la kulmo koror degdeg ah oo qorista I/O, sawirka 20G LVM wuxuu buuxsami karaa isla markiiba. Marka sawirka LVM uu buuxsamo, wuxuu noqdaa mid aan ansax ahayn, kaydintuna way fashilmi doontaa. Waxa ka sii daran, sawirrada LVM ee si weyn loo isticmaalo waxay si weyn u dhimi karaan waxqabadka I/O ee mugga database-ka koowaad, taas oo keenta koror ku yimaada daahitaanka codsiga.

U gudubka Ilaalinta Heerka Ganacsi

U gudubka qoraallada DIY una gudubka madal ganacsi waa marxalad muhiim ah oo qaan-gaarnimo u ah koox kasta oo kaabayaasha dhaqaalaha ah. Hadafku waa in laga guuro “rajada ah in qoraalku socday” una gudbo haysashada caddayn cryptographic ah oo ku saabsan soo-celinta.

Madallada sida CloudSave waxaa si gaar ah loogu naqshadeeyay inay baabi’iyaan meelaha indho-la’aanta ah ee qoraalka DIY. Iyadoo la geynayo wakiillo codsi-og ah, CloudSave waxay si toos ah ula falgashaa API-yada database-ka (MySQL, PostgreSQL, MS SQL, Oracle) si ay u maamusho kaydinta jireed iyo macquulka ah ee joogtada ah iyada oo aan la qufulin miisaska ama aan la dhimin waxqabadka.

Faa’iidooyinka Muhiimka ah ee ka guurista Qoraallada:

  1. Xaqiijinta Tooska ah: Madallada casriga ah kaliya ma qaadaan kayd; way tijaabiyaan. CloudSave waxay si toos ah u kicin kartaa tusaale database ku meel gaar ah, soo celin kartaa kaydka, socodsiin kartaa hubinta joogtaynta (tusaale, DBCC CHECKDB), oo ay burburin kartaa, iyadoo bixinaysa warbixin la xaqiijiyay in kaydku uu dhab ahaantii la isticmaali karo.
  2. Kaydinta Aan La Beddeli Karin (Immutable): Si loola dagaallamo ransomware-ka, kaydadku waa inay noqdaan kuwo aan la beddeli karin. Qoraallada DIY si fudud uma qori karaan kaydinta WORM (Qor Hal Mar, Akhri Marar Badan). Xalalka ganacsigu waxay si dabiici ah ula midoobaan S3 Object Lock iyo kaydinta daruuriga ah ee aan la beddeli karin, iyadoo la hubinayo in xitaa haddii server-ka si buuxda loo jabsado, kaydadka aan la tirtiri karin ama sir-gelin karin weeraryahan.
  3. PITR oo la fududeeyay: Halkii aad gacanta ku toli lahayd kayd aasaasi ah iyo boqollaal faylasha WAL ah iyadoo la isticmaalayo cabbirro adag oo recovery.conf ama postgresql.auto.conf ah, madalladu waxay bixiyaan waqti-xariir muuqaal ah. Waxaad si fudud u doorataa daqiiqadda saxda ah ee aad rabto inaad ku soo celiso, software-kuna wuxuu si toos ah u maareeyaa dib-u-ciyaarista log-ga.
  4. Deduplication iyo Compression: Qoraallada DIY waxay ku tiirsan yihiin gzip, kaas oo fayl kasta si gooni ah u soo ururiya. Software-ka kaydinta ganacsigu wuxuu isticmaalaa deduplication-ka heerka block-ka ee caalamiga ah, taas oo si weyn u yaraynaysa kharashyada kaydinta iyo bandwidth-ka shabakadda marka la wareejinayo kaydadka meel ka baxsan goobta.

Gabagabo

Qorista qoraal Bash ah oo gaar ah si loo kaydiyo database waa sahlan tahay. Qorista qoraal maareeya guuldarrooyinka tuubada aamusan, dammaanad qaada joogtaynta ACID, maareeya furayaasha cryptographic si ammaan ah, ka hortaga luminta xogta ku salaysan kaydinta, iyo dammaanad qaada SLAs RTO/RPO adag waa mid aan suurtogal ahayn.

Deegaannada wax-soo-saarka, database-ku waa hantida ugu muhiimsan ee ganacsiga. Ula dhaqanka ilaalintiisa sidii mashruuc dhinac ah oo ay dayactiraan dhowr boqol oo sadar oo qoraal shell ah waa khatar aan ganacsi kastaa awoodi karin. Iyadoo la baaray istaraatiijiyadahaaga kaydinta ee hadda, la fahmay xaddidaadaha dump-yada macquulka ah, iyo u guurista madallo adag oo toos ah sida CloudSave, kooxaha DevOps iyo DBA waxay baabi’in karaan “qodobka baska” ee qoraallada gaarka ah waxayna hubin karaan in xogtoodu ay tahay mid dhab ahaantii adkaysi leh.

Categories