Categories
Database Backup

** Discover how DevOps engineers and DBAs can detect corrupted database backups before disaster strikes. Learn advanced techniques for PostgreSQL, SQL Server, and MySQL, including automated restore testing and checksum validation.

Emhlabeni onzima wokuphathwa kwemininingo egciniwe (database) kanye nokuvikeleka kwesayithi, kukhona umgomo owaziwayo: I-Schrödinger’s Backup. Isimo sanoma yikuphi ukulondolozwa kwedatha (backup) asaziwa kuze kube yilapho uzama ukukubuyisela. Kuze kube yileso sikhathi, kukhona esimweni se-quantum sokuba sesimweni esikahle kakhulu futhi esonakele ngokuphelele.

Konjiniyela be-DevOps kanye nabaPhathi be-Database (DBAs), ukuthola ukuthi i-backup ebalulekile yonakele phakathi nokuphazamiseka okusebenzayo kuyisimo esibi kakhulu. Iguqula umsebenzi wokubuyisela ojwayelekile ube yinhlekelele yokulahleka kwedatha. Lokhu “kuhlasela okuthulile” kokuthembeka kwedatha kuvame ukungabonwa ngoba imisebenzi ye-backup ivame ukubika i-Exit Code 0 ephumelelayo ngisho nalapho okuqukethwe okuyisisekelo konakele.

Kulo mhlahlandlela ophelele, sizohlaziya ukuthi ukulimala kwe-backup kwenzeka kanjani, sihlole amasu okuqinisekisa athile e-database, futhi sikhombise indlela yokwakha amapayipi okubuyisela azenzakalelayo futhi aqinile ezindaweni zokukhiqiza.

Ukuhlaziya Ukulimala kwe-Backup

Ukuze uthole ukulimala, kufanele uqale uqonde ukuthi kwenzeka kanjani. Ukulimala kwe-backup ngokuvamile kuwela ezigabeni ezimbili: okomzimba (izinga lengqalasizinda) kanye nokunengqondo (izinga lohlelo lokusebenza).

Ukulimala Komzimba

Ukulimala komzimba kwenzeka lapho ama-bit angempela kwimidiya yokugcina eshintshiwe. Lokhu kungenzeka phakathi nenqubo yokufunda kusuka kudiski yomthombo, phakathi kokudluliswa kwenethiwekhi, noma lapho kuhlala endaweni yokugcina eqondiwe.
* Bit Rot: Ukuwohloka kancane kancane kwemidiya yokugcina kungashintsha ama-bit ngokuthula.
* Amaphutha Okudlulisa: Nakuba i-TCP inama-checksums, aziwa ngokuba buthakathaka (16-bit). Izindawo ezinomthamo ophezulu zingathola ukulimala kwedatha okuthulile phezu kocingo okuhluleka i-TCP ukukubamba.
* Amaphutha Esilawuli Sokugcina: Iziphazamisi ze-hardware ezilawulini ze-RAID noma izindwangu ze-SAN zingabhala idatha engcolile ngenkathi zibika impumelelo ku-OS.

Ukulimala Okunengqondo

Ukulimala okunengqondo kungase kube yingozi kakhulu ngoba ifayela le-backup ngokwalo liphelele, kodwa idatha engaphakathi kulo iphukile.
* Garbage In, Garbage Out (GIGO): Uma i-database yakho ebukhoma inenkomba eyonakele noma ikhasi elidabukile, ithuluzi lakho le-backup lingase likopishe ngokwethembeka lelo khasi elonakele. Umsebenzi we-backup uyaphumelela, kodwa ukubuyisela kuzohluleka noma kuveze i-database ephukile.
* Okwenziwayo Okungaphelele: Izithombe zezingxenye zohlelo lwefayela ezithathwe ngaphandle kokuqandisa kahle i-I/O ye-database (isb., ukungasebenzisi i-FLUSH TABLES WITH READ LOCK ku-MySQL) kuholela emakhasini adabukile nezimo ezingenakubuyiselwa.

Ukuthola Ngaphambi Kwesikhathi: Ama-Checksums kanye ne-Cryptographic Hashing

Umugqa wokuqala wokuzivikela ekulimaleni komzimba ukuqinisekiswa kwe-cryptographic. Ukuthembela kusayizi wefayela noma izinsuku zokuguqulwa akwanele.

Ukunika amandla ama-Checksums ezingeni le-Database

Izinhlelo zokuphatha imininingwane egciniwe (RDBMS) zesimanje zisekela ama-checksums ezingeni lekhasi. Uma enikwe amandla, i-database ibala i-checksum yekhasi ngalinye ngaphambi kokulibhala kudiski. Lapho ikhasi lifundwa (kungaba ngombuzo noma inqubo ye-backup), i-checksum iyaqinisekiswa.

Ku-PostgreSQL, ungavumela ama-checksums edatha phakathi kokuqalisa kwe-cluster:

# Qalisa i-cluster entsha ye-PostgreSQL enama-checksums anikwe amandla
initdb --data-checksums -D /var/lib/postgresql/data

Qaphela: Uma unayo i-cluster ye-PostgreSQL ekhona, ungasebenzisa insiza ye-pg_checksums ukuze uyivule ungaxhunyiwe ku-inthanethi.

Ku-Microsoft SQL Server, qinisekisa ukuthi i-PAGE_VERIFY isethwe ku-CHECKSUM (okuzenzakalelayo ezinhlotsheni zesimanje, kodwa kufanelekile ukuqinisekisa ezinhlelweni zakudala):

ALTER DATABASE [ProductionDB] SET PAGE_VERIFY CHECKSUM;
GO

Ukuqinisekisa ama-Backup lapho Ehlala

Uma i-backup ifika endaweni yakho yokugcina, ukuthembeka kwayo kufanele kuqinisekiswe nge-cryptographic. Izinkundla ze-backup zebhizinisi ezifana ne-CloudSave zibala ngokuzenzakalelayo futhi ziqinisekise ama-hashi e-SHA-256 amabhulokhi e-backup phakathi nokudluliswa nalapho ehlala. Uma uphatha imibhalo (scripts) yangokwezifiso, kufanele ukwenze lokhu mathupha:

# Khiqiza i-hashi ye-SHA-256 ngemva kokudalwa kwe-backup
sha256sum prod_db_backup.tar.gz > prod_db_backup.tar.gz.sha256

# Qinisekisa i-hashi kuseva yokugcina
sha256sum -c prod_db_backup.tar.gz.sha256

Amasu Okuqinisekisa Athile e-Database

Izinjini ezahlukene ze-database zinikeza amathuluzi omdabu okuqinisekisa ukuthembeka kwezinto zazo ze-backup.

PostgreSQL: pg_verifybackup

Yethulwe ku-PostgreSQL 13, i-pg_verifybackup iyinguquko yama-backup omzimba athathwe nge-pg_basebackup. Ifunda ifayela le-backup_manifest elikhiqizwe phakathi ne-backup futhi iqinisekise ukuthi wonke amafayela akhona nokuthi ama-checksums awo ayafana.

# Qalisa ukuqinisekiswa ngokumelene nomkhombandlela we-backup womzimba
pg_verifybackup /mnt/backups/postgres/base_backup_20231025/

Uma i-bit eyodwa ishintshile kunoma yimaphi amafayela edatha, i-pg_verifybackup izophonsa iphutha elibulalayo, okuvumela izinhlelo zakho zokuqapha ukuthi zixwayise ithimba le-DBA ngokushesha.

Microsoft SQL Server: RESTORE VERIFYONLY

I-SQL Server inikeza umyalo womdabu wokuqinisekisa ukuthembeka komzimba kwefayela le-backup ngaphandle kokulibuyisela ngempela. Ihlola izihloko ze-backup futhi iqinisekise ama-checksums ekhasi (uma enikwe amandla phakathi ne-backup).

RESTORE VERIFYONLY 
FROM DISK = 'Z:BackupsProdDB_Full.bak' 
WITH CHECKSUM;

Isexwayiso: I-RESTORE VERIFYONLY iqinisekisa kuphela ukuthi ifayela le-backup liyafundeka nokuthi ama-checksums omzimba ayafana. Ayikuqinisekisi ukuthembeka okunengqondo. Ukuze uqinisekise ukuthembeka okunengqondo, kufanele wenze ukubuyisela okugcwele futhi usebenzise i-DBCC CHECKDB.

MySQL / InnoDB: Percona XtraBackup

Ezindaweni ze-MySQL, ama-backup omzimba avame ukuphathwa yi-Percona XtraBackup. Inqubo ye-backup iqukethe ukukopisha amafayela, kodwa i-backup ayihambisani kuze kube yilapho ama-logs okwenziwayo (redo logs) esetshenziswa. Isigaba se---prepare sisebenza njengesheke lokuthembeka elakhelwe ngaphakathi.

# Ukulungiselela i-backup kusebenzisa ama-redo logs. 
# Uma i-backup yonakele, lesi sinyathelo sizohluleka.
xtrabackup --prepare --target-dir=/data/backups/mysql/

Izinga Legolide: Ukuhlola Ukubuyisela Okuzenzakalelayo

Ama-checksums nemiyalo yokuqinisekisa iyadingeka, kodwa ayanele. Indlela kuphela yokuqinisekisa ukuthi i-backup iyasebenza ukuyibuyisela. Ezindaweni zesimanje ze-DevOps, le nqubo kufanele ibe ezenzakalelayo ngokuphelele.

Ngokuphatha ama-backup njengekhodi, ungakha ipayipi le-CI/CD lokubuyisela i-database yakho. Leli payipi kufanele lihlinzeke ngengqalasizinda yesikhashana, lenze ukubuyisela, lisebenzise imibuzo yokuqinisekisa, futhi livalelise indawo.

Ukwakha Ipayipi Lokubuyisela Okuzenzakalelayo

Ngezansi isibonelo sombhalo we-Bash ongase uqalwe nsuku zonke ngomsebenzi we-cron noma umgijimi we-CI (njenge-GitLab CI noma i-GitHub Actions) ukuze kuqinisekiswe i-dump enengqondo ye-PostgreSQL.

#!/bin/bash
set -e

BACKUP_FILE="/mnt/storage/prod_db_latest.dump"
DB_NAME="prod_db"
CONTAINER_NAME="pg_restore_test"

echo "[INFO] Ukuqala Ukuhlolwa Kokubuyisela Okuzenzakalelayo..."

# 1. Qalisa isitsha se-PostgreSQL sesikhashana
docker run --name $CONTAINER_NAME 
  -e POSTGRES_PASSWORD=testpass 
  -d postgres:15

# Linda i-PostgreSQL ukuthi ilungele
echo "[INFO] Ilinde i-database ukuthi iqalise..."
until docker exec $CONTAINER_NAME pg_isready -U postgres; do
  sleep 2
done

# 2. Dala i-database eqondiwe
docker exec $CONTAINER_NAME psql -U postgres -c "CREATE DATABASE $DB_NAME;"

# 3. Yenza ukubuyisela
echo "[INFO] Ibuyisela i-backup..."
docker cp $BACKUP_FILE $CONTAINER_NAME:/tmp/backup.dump
docker exec $CONTAINER_NAME pg_restore -U postgres -d $DB_NAME -1 /tmp/backup.dump

# 4. Qalisa Imibuzo Yokuqinisekisa Enengqondo
echo "[INFO] Isebenzisa imibuzo yokuqinisekisa..."
# Hlola ukuthi ithebula labasebenzisi linerekhodi ezingaphezu kuka-10,000
USER_COUNT=$(docker exec $CONTAINER_NAME psql -U postgres -d $DB_NAME -t -c "SELECT COUNT(*) FROM users;")

if [ "$USER_COUNT" -lt 10000 ]; then
    echo "[ERROR] Ukuqinisekiswa okunengqondo kuhlulekile. Kulindeleke abasebenzisi abangaphezu kuka-10000, kutholakale $USER_COUNT"
    # Qalisa isexwayiso se-PagerDuty / Slack lapha
    exit 1
else
    echo "[SUCCESS] Ukuqinisekiswa okunengqondo kuphumelele. Inani labasebenzisi: $USER_COUNT"
fi

# 5. Valelisa indawo yesikhashana
echo "[INFO] Ihlanzayo..."
docker rm -f $CONTAINER_NAME

echo "[INFO] Ukuhlolwa Kokubuyisela Okuzenzakalelayo Kuqedwe Ngempumelelo."

Yini okufanele uyigunyaze?

Lapho wenza ukuhlolwa kokubuyisela okuzenzakalelayo, ungahloli nje kuphela ukuthi i-database iyaqala yini. Qalisa imibuzo yokuqinisekisa ethile yohlelo lokusebenza:
1. Izibalo Zemigqa: Qinisekisa ukuthi amathebula ayisisekelo anezibalo zemigqa ezilindelekile (isb., ithebula le-users akufanele libe lize).
2. Idatha Yakamuva: Buza amarekhodi adalwe emahoreni angama-24 adlule ukuze uqinisekise ukuthi i-backup ayindala.
3. Ukuthembeka Kokubhekisela: Qalisa imibhalo ukuze uhlole okhiye bangaphandle abalahliwe, okubonisa ukulimala okunengqondo.

Ukuqapha Nokuxwayisa Ngezinto Ezingajwayelekile ze-Backup

Ukuthola ukulimala ngaphambi kokuba inhlekelele ishaye kudinga ukubonakala okuqinile. Ngaphandle kwezimo zempumelelo/ukuhluleka, kufanele uqaphe imethadatha yemisebenzi yakho ye-backup ukuze uthole izinto ezingajwayelekile.

Ukuqapha Kwe-Heuristic

Hlanganisa imethadatha yakho ye-backup ku-Prometheus futhi uyibone ngeso lengqondo nge-Grafana. Setha izexwayiso ze-heuristics ezilandelayo:
* Ukwehla Okungazelelwe Kosayizi: Uma i-backup yakho yansuku zonke ihlale ingu-500GB, kanti i-backup yanamuhla ingu-50MB, umsebenzi kungenzeka uqediwe ngempumelelo (Exit Code 0), kodwa kungenzeka ukuthi ufake i-schema esingenalutho.
* Izinto Ezingajwayelekile Zesikhathi: Uma i-backup evame ukuthatha amahora ama-2 iqeda ngemizuzu emi-5, kukhona okweqiwe. Ngakolunye uhlangothi, uma kuthatha amahora ayi-10, kungenzeka ube nokuwohloka kwe-disk I/O okungaholela ekulimaleni.
* Ukunqwabelana kwe-WAL/Archive Log: Uma i-database yakho ikhiqiza ama-Write-Ahead Logs (WAL) kodwa uhlelo lwe-backup aluwagcini ngokushesha okwanele, usengozini yokuphazamiseka ekuchungechungeni kwakho kwe-Point-in-Time Recovery (PITR).

Ukuqalisa Umthetho we-3-2-1 Ngezheke Zokuthembeka

Umthetho we-backup we-3-2-1 ojwayelekile embonini (amakhophi ama-3 edatha, imidiya emi-2 ehlukene, elilodwa elingaphandle kwesayithi) usebenza kuphela uma wonke amakhophi eqinisekisiwe.

Yilapho ukusebenzisa isixazululo sebhizinisi esifana ne-CloudSave kunciphisa kakhulu umthwalo wokusebenza. Esikhundleni sokubhala nokugcina imibhalo eyinkimbinkimbi ye-bash yawo wonke ama-node e-database, i-CloudSave ihlanganisa ngokuqondile nengqalasizinda yakho ukuze yenze umjikelezo wokuphila we-3-2-1 ube ngokuzenzakalelayo. Inikeza isitoreji esingenakuguqulwa—esivikela ekuhlaselweni kwe-ransomware—futhi ifaka amashejuli okuqinisekisa ukubuyisela azenzakalelayo. I-CloudSave ingaqalisa ngokuzenzakalelayo izindawo ze-sandbox ezihlukanisiwe, ikhweze i-backup, iqalise imibhalo yakho yokuqinisekisa ye-SQL yangokwezifiso, futhi ibike isimo sempilo emuva kudeshibhodi yakho ephakathi.

Isiphetho

Ama-backup e-database alimele ayisibulali esithulile esingabhubhisa amabhizinisi. Ukuthembela kuphela ku-Exit Code 0 wombhalo we-backup kuyingozi enkulu.

Ukuze uvikele ngempela izindawo zakho zokukhiqiza, kufanele usebenzise isu lokuzivikela okujulile:
1. Vumela ama-checksums ezingeni lekhasi ngaphakathi kwenjini yakho ye-database.
2. Sebenzisa amathuluzi okuqinisekisa omdabu (pg_verifybackup, RESTORE VERIFYONLY) ngokushesha ngemva kokudalwa kwe-backup.
3. Qapha imethadatha ye-backup (usayizi, isikhathi) ngezinto ezingajwayelekile ze-heuristic.
4. Qalisa ukuhlolwa kokubuyisela okuzenzakalelayo, okwesikhashana njengengxenye yepayipi lakho lokusebenza lansuku zonke.

Ngokushintsha usuke emcabangweni we-backup “womlilo nokukhohlwa” uye kumodeli “yokuqinisekisa ukubuyisela okuqhubekayo”, uqinisekisa ukuthi lapho inhlekelele ishaya, idatha yakho ilungile, ithembekile, futhi ingabuyiselwa ngokugcwele.