Categories
Database Backup, Uncategorized @sq

Ndërsa bazat e të dhënave rriten në rangun e terabajteve dhe petabajteve, strategjitë tradicionale të kopjeve rezervë (backup) fillojnë të dështojnë nën peshën e tyre. Mbështetja vetëm në kopje rezervë të plota ditore për Bazat e të Dhënave Shumë të Mëdha (VLDB) krijon pengesa të rënda në I/O, ngop gjerësinë e brezit të rrjetit dhe rrit kostot e ruajtjes. Më e rëndësishmja, një cikël rezervë 24-orësh e kufizon Objektivin tuaj të Pikës së Rimëkëmbjes (RPO) në një ditë të plotë—një rrezik i papranueshëm për ndërmarrjet moderne të drejtuara nga të dhënat.

Për të arritur kërkesat strikte të RPO dhe Objektivit të Kohës së Rimëkëmbjes (RTO) pa dëmtuar performancën e prodhimit, Administratorët e Bazave të të Dhënave (DBA) dhe inxhinierët DevOps duhet të zbatojnë kopje rezervë inkrementale të MySQL të fuqishme.

Ky udhëzues gjithëpërfshirës eksploron arkitekturën, zbatimin dhe praktikat më të mira për ekzekutimin e kopjeve rezervë inkrementale të MySQL në mjedise prodhimi me xhiro të lartë, duke u fokusuar në menaxhimin e regjistrave binarë (binary logs) dhe kopjet rezervë fizike përmes Percona XtraBackup.


Kuptimi i Arkitekturave të Kopjeve Rezervë të MySQL: Logjike vs. Fizike

Përpara se të kaloni te zbatimi, është thelbësore të kuptoni dallimin midis kopjeve rezervë logjike dhe fizike, pasi kjo përcakton strategjinë tuaj inkrementale.

  • Kopjet Rezervë Logjike (p.sh., mysqldump, mydumper): Këto mjete nxjerrin të dhëna duke ekzekutuar pyetje SQL dhe duke gjeneruar deklarata INSERT. Ndonëse janë të shkëlqyera për migrimet ndër-versionale ose rivendosjen e tabelave të vetme, ato janë jashtëzakonisht të ngadalta. Kopjet rezervë inkrementale në nivel blloku janë të pamundura me mjetet logjike; duhet të mbështeteni plotësisht në regjistrat binarë për të ecur përpara nga një bazë logjike e plotë.
  • Kopjet Rezervë Fizike (p.sh., Percona XtraBackup, MySQL Enterprise Backup): Këto mjete kopjojnë skedarët aktualë të të dhënave fizike (si skedarët .ibd të InnoDB) nga disku. Ato janë dukshëm më të shpejta, konsumojnë më pak CPU dhe mbështesin në mënyrë native kopjet rezervë inkrementale në nivel blloku duke gjurmuar faqet e modifikuara të InnoDB.

Për mjediset e prodhimit që tejkalojnë 100GB, kopjet rezervë fizike të kombinuara me arkivimin e regjistrave binarë është qasja standarde e industrisë.


Metoda 1: Rimëkëmbja në një Pikë në Kohë (PITR) përmes Regjistrave Binarë të MySQL

Forma më themelore e kopjes rezervë inkrementale në MySQL është Regjistri Binar (binlog). Binlog regjistron të gjitha operacionet që modifikojnë gjendjen e bazës së të dhënave. Duke marrë një kopje rezervë të plotë periodike dhe duke arkivuar vazhdimisht binlog-ët, mund të arrini një RPO afër zeros.

Hapi 1: Konfigurimi i Regjistrave Binarë

Për të përdorur binlog-ët për rimëkëmbje inkrementale, ato duhet të jenë të aktivizuara dhe të konfiguruara siç duhet në skedarin tuaj my.cnf ose mysqld.cnf. Në MySQL 8.0+, regjistrimi binar është i aktivizuar si parazgjedhje, por mjediset e prodhimit kërkojnë akordim specifik.

[mysqld]
# Aktivizo regjistrimin binar
log_bin = /var/log/mysql/mysql-bin.log

# Përdor formatin ROW për konsistencën e të dhënave dhe replikim/rimëkëmbje të besueshme
binlog_format = ROW

# Siguro sinkronizimin në disk për pajtueshmërinë ACID (1 = sinkronizo në çdo commit)
sync_binlog = 1

# Mbaj binlog-ët për një periudhë specifike (p.sh., 7 ditë)
binlog_expire_logs_seconds = 604800

# Madhësia maksimale e një skedari binlog përpara rrotullimit
max_binlog_size = 100M

Shënim: Ndryshimi i këtyre parametrave kërkon një rinisje të shërbimit MySQL nëse nuk aplikohen në mënyrë dinamike përmes SET GLOBAL.

Hapi 2: Arkivimi i Binlog-ëve

Një kopje rezervë e plotë shërben si bazë. Nëse përdorni mysqldump, duhet të përdorni flamurin --master-data=2 (ose --source-data=2 në MySQL 8.0.26+) për të regjistruar skedarin dhe pozicionin e saktë të binlog-ut në momentin e kopjes rezervë.

Për të bërë kopje rezervë inkrementale të bazës së të dhënave, thjesht arkivoni skedarët e binlog-ut. Mund ta detyroni MySQL të kalojë në një skedar të ri binlog duke përdorur:

FLUSH LOGS;

Më pas mund t’i kopjoni në mënyrë të sigurt skedarët e vjetër dhe të mbyllur të binlog-ut në hapësirën tuaj të sigurt të kopjeve rezervë.

Hapi 3: Rivendosja përmes Binlog-ëve

Për të rivendosur, fillimisht rivendosni kopjen rezervë bazë të plotë. Më pas, riprodhoni binlog-ët e arkivuar deri në pikën tuaj të dëshiruar në kohë duke përdorur mjetin mysqlbinlog.

# Ekstrakto SQL nga binlog-ët
mysqlbinlog /path/to/backup/mysql-bin.000123 /path/to/backup/mysql-bin.000124 > incremental_restore.sql

# Apliko ndryshimet inkrementale në bazën e të dhënave
mysql -u root -p < incremental_restore.sql

Për të ndaluar në një kohë specifike (p.sh., pak përpara një DROP TABLE katastrofik), përdorni flamurin --stop-datetime:

mysqlbinlog --stop-datetime="2023-10-27 14:30:00" /path/to/backup/mysql-bin.000123 | mysql -u root -p

Metoda 2: Kopjet Rezervë Fizike Inkrementale me Percona XtraBackup

Ndërsa binlog-ët janë të shkëlqyer për PITR, riprodhimi i binlog-ëve për ditë të tëra gjatë një fatkeqësie është tepër i ngadaltë, duke ndikuar rëndë në RTO-në tuaj. Për ta zgjidhur këtë, DBA-të përdorin Percona XtraBackup për të marrë kopje rezervë fizike inkrementale.

Si XtraBackup gjurmon ndryshimet inkrementale

InnoDB mban një Numër të Sekuencës së Regjistrit (LSN). Sa herë që të dhënat modifikohen, LSN rritet. Kur XtraBackup merr një kopje rezervë të plotë, ai regjistron LSN-në përfundimtare. Gjatë një kopjeje rezervë inkrementale, XtraBackup skanon faqet e InnoDB dhe kopjon vetëm faqet LSN-ja e të cilave është më e lartë se LSN-ja e kopjes rezervë të mëparshme.

Hapi 1: Krijimi i përdoruesit të kopjes rezervë me privilegje minimale

Siguria është parësore. Asnjëherë mos ekzekutoni kopje rezervë si përdoruesi root i MySQL. Krijoni një përdorues të dedikuar për kopje rezervë me privilegjet minimale të kërkuara:

CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backup_user'@'localhost';
GRANT BACKUP_ADMIN ON *.* TO 'backup_user'@'localhost'; -- Kërkohet për MySQL 8.0+
FLUSH PRIVILEGES;

Hapi 2: Marrja e kopjes rezervë bazë të plotë

Një zinxhir kopjesh rezervë inkrementale duhet të fillojë me një kopje rezervë të plotë.

xtrabackup --backup 
  --user=backup_user 
  --password='StrongPassword123!' 
  --target-dir=/data/backups/base

Pasi të përfundojë, verifikoni skedarin xtrabackup_checkpoints në direktorinë e synuar. Ai do të përmbajë vlerën to_lsn, e cila është thelbësore për hapin tjetër.

backup_type = full-backuped
from_lsn = 0
to_lsn = 14589012

Hapi 3: Marrja e kopjes rezervë inkrementale

Për të marrë një kopje rezervë inkrementale, duhet t’i tregoni XtraBackup direktorinë e kopjes rezervë të mëparshme (bazën, ose një inkrementale të mëparshme).

xtrabackup --backup 
  --user=backup_user 
  --password='StrongPassword123!' 
  --target-dir=/data/backups/inc1 
  --incremental-basedir=/data/backups/base

Skedari xtrabackup_checkpoints/data/backups/inc1 tani do të tregojë se është një kopje rezervë inkrementale, duke filluar nga to_lsn e kopjes rezervë bazë.

Hapi 4: Përgatitja e kopjeve rezervë për rivendosje

Kopjet rezervë fizike nuk janë të rivendosshme menjëherë. Ato përmbajnë transaksione të pakomituara që po ekzekutoheshin gjatë procesit të kopjimit. Duhet t’i “përgatisni” kopjet rezervë duke aplikuar regjistrat e ridërgimit (redo logs) të InnoDB.

Rregull thelbësor: Kur përgatisni një zinxhir kopjesh rezervë inkrementale, duhet të përdorni flamurin --apply-log-only për çdo hap përveç atij të fundit. Kjo parandalon InnoDB nga kthimi prapa i transaksioneve të pakomituara që mund të përfundohen në një kopje rezervë inkrementale pasuese.

1. Përgatitja e kopjes rezervë bazë:

xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base

2. Aplikimi i kopjes rezervë inkrementale në bazë:

xtrabackup --prepare --apply-log-only 
  --target-dir=/data/backups/base 
  --incremental-dir=/data/backups/inc1

(Përsëriteni këtë hap për inc2, inc3, etj., duke mbajtur --apply-log-only)

3. Përgatitja përfundimtare:
Pasi të gjitha kopjet rezervë inkrementale të jenë bashkuar në direktorinë bazë, ekzekutoni një përgatitje përfundimtare pa flamurin --apply-log-only për të kthyer prapa çdo transaksion të mbetur të pakomituar.

xtrabackup --prepare --target-dir=/data/backups/base

Direktoria /data/backups/base tani përmban një pamje plotësisht konsistente të bazës suaj të të dhënave deri në kohën e kopjes rezervë të fundit inkrementale, gati për t’u rivendosur duke përdorur xtrabackup --copy-back.


Automatizimi dhe Shkallëzimi me CloudSave

Ndërsa skriptimi manual duke përdorur XtraBackup, cron dhe rsync është plotësisht i realizueshëm për një server të vetëm, orkestrimi i kësaj në dhjetëra ose qindra klasterë bazash të dhënash sjell kosto të mëdha operacionale. Menaxhimi i zinxhirëve të ruajtjes së kopjeve rezervë, monitorimi për dështime të heshtura dhe sigurimi i replikimit të sigurt jashtë vendit mund të konsumojë shpejt gjerësinë e brezit të një DBA.

Këtu bëhet e paçmueshme një platformë ndërmarrjeje si CloudSave. CloudSave integrohet në mënyrë native me metodologjitë e MySQL dhe Percona XtraBackup për të automatizuar të gjithë ciklin jetësor të kopjeve rezervë të bazës suaj të të dhënave.

Në vend që të mirëmbani skripte komplekse bash, CloudSave ju lejon të përcaktoni politika që automatikisht:
* Planifikojnë kopje rezervë të plota dhe inkrementale në nivel blloku pa bllokuar tabelat e prodhimit.
* Menaxhojnë zinxhirët LSN dhe bashkojnë automatikisht kopjet rezervë inkrementale për të sintetizuar kopje rezervë të reja të plota (synthetic fulls), duke reduktuar drastikisht kërkesat për ruajtje.
* Kompresojnë dhe enkriptojnë ngarkesat e kopjeve rezervë në tranzit dhe në pushim (AES-256).
* Drejtojnë kopjet rezervë direkt në ruajtje të pandryshueshme jashtë vendit (AWS S3, Azure Blob, Google Cloud Storage) për t’u mbrojtur nga ransomware.
* Sigurojnë rrjedha pune të automatizuara të rivendosjes me një klikim që trajtojnë sekuencat komplekse --prepare dhe --apply-log-only në prapavijë.

Duke ia deleguar orkestrimin CloudSave, ekipet e infrastrukturës mund të garantojnë SLA-të e RPO dhe RTO pa punën manuale.


Praktikat më të mira për kopjet rezervë inkrementale të MySQL në prodhim

Për të siguruar që strategjia juaj e kopjeve rezervë të jetë elastike, ndiqni praktikat më të mira të ndërmarrjes:

1. Shkarkoni kopjet rezervë në një replikë

Ekzekutimi i XtraBackup ose arkivimi i binlog-ëve konsumon I/O të diskut dhe CPU. Në mjedise me transaksione të larta, asnjëherë mos ekzekutoni kopje rezervë në nyjen kryesore (primary master). Në vend të kësaj, konfiguroni një Replikë Leximi MySQL të dedikuar posaçërisht për kopje rezervë. Kjo izolon dënimin e I/O dhe siguron që pyetjet e prodhimit të mbeten të paprekura.

2. Zbatoni rregullin e “Kopjes Rezervë të Schrödinger-it”

Gjendja e çdo kopjeje rezervë është e panjohur derisa të përpiqeni ta rivendosni atë. Një kopje rezervë e patestuar është thjesht një koncept teorik. Automatizoni një proces javor që rivendos zinxhirin tuaj më të fundit të plotë dhe inkremental në një server të izoluar të testimit (staging). Validoni rivendosjen duke ekzekutuar mysqlcheck dhe duke pyetur pikat e njohura të të dhënave.

3. Monitoroni rritjen e Binlog-ut

Një rritje e papritur në shkrimet e bazës së të dhënave (p.sh., një punë masive UPDATE ose DELETE) mund të bëjë që regjistrat binarë të shpërthejnë në madhësi, duke mbushur potencialisht diskun tuaj dhe duke rrëzuar MySQL. Zbatoni monitorim strikt në direktorinë /var/log/mysql dhe vendosni alarme për konsum jonormal të diskut.

4. Mbani zinxhirët inkrementalë të shkurtër

Mos lidhni së bashku 30 ditë kopje rezervë inkrementale. Nëse një skedar inkremental në mes të zinxhirit është i korruptuar, të gjitha kopjet rezervë pasuese bëhen të padobishme. Një planifikim standard i ndërmarrjes është:
* Javor: Kopje Rezervë Fizike e Plotë (E diel në 02:00)
* Ditor: Kopje Rezervë Fizike Inkrementale (E hënë-E shtunë në 02:00)
* I vazhdueshëm: Arkivimi i Regjistrit Binar (çdo 15 minuta)

5. Validoni I/O të ruajtjes gjatë rivendosjes

RTO-ja juaj varet shumë nga shpejtësia e shkrimit të ruajtjes suaj gjatë një rivendosjeje. Sigurohuni që disqet e synuara për rimëkëmbjen e bazës suaj të të dhënave të kenë IOPS të mjaftueshme për të përballuar operacionet masive të shkrimit të gjeneruara nga xtrabackup --copy-back.

Përfundim

Zotërimi i kopjeve rezervë inkrementale të MySQL është një aftësi e panegociueshme për menaxhimin e bazave të të dhënave të prodhimit. Duke kombinuar efikasitetin në nivel blloku të Percona XtraBackup me aftësitë granulare të Rimëkëmbjes në një Pikë në Kohë të regjistrave binarë të MySQL, organizatat mund të arrijnë objektiva agresive të RPO dhe RTO. Pavarësisht nëse zgjidhni të menaxhoni zinxhirët LSN dhe rrotullimet e binlog-ut përmes automatizimit të personalizuar ose të shfrytëzoni një platformë ndërmarrjeje si CloudSave, një strategji inkrementale e arkitekturuar mirë është mbrojtja juaj përfundimtare kundër humbjes katastrofike të të dhënave.

Kategori