Categories
Database Backup

** Discover why mysqldump fails large MySQL databases and learn how to implement enterprise-grade physical backups using Percona XtraBackup and CloudSave to drastically reduce your RTO.

Tobtobkii sano, mysqldump waxa uu ahaa qalabka ugu muhiimsan ee kaydinta xogta (backup) ee MySQL. Waa qalab meel walba laga helo, fudud, oo horay loogu sii rakibay dhammaan qaybaha MySQL iyo MariaDB. Xogaha yaryar iyo kuwa dhexdhexaadka ah, si fiican ayuu u shaqeeyaa.

Si kastaba ha ahaatee, marka ururadu ay koraan oo xogtoodu ay dhaafto 100GB, 500GB, ama terabytes badan, ku tiirsanaanta mysqldump waxay ka beddeshaa hab-dhaqan wanaagsan una beddeshaa khatar weyn oo dhanka naqshadaynta ah. Haddii aad tahay DBA ama injineer DevOps oo maamula xog-kayd waaweyn, waxaad u badan tahay inaad la kulantay guuldarrooyin aamusan, hoos u dhac ku yimaada waxqabadka, iyo Waqtiga Soo-kabashada (RTO) oo aan la aqbali karin oo la xiriira kaydinta macquulka ah (logical dumps).

Maqaalkan, waxaan ku falanqayn doonaa xaddidaadaha naqshadaynta ee mysqldump, waxaan sahamin doonaa sababta ay ugu guuldaraysato marka xogtu weynaato, waxaana faahfaahin doonaa sida loo hirgeliyo xeeladaha kaydinta jireed (physical backup) ee heerka ganacsi si loo ilaaliyo xogtaada muhiimka ah.

Xaddidaadaha Naqshadaynta ee mysqldump

Si loo fahmo sababta mysqldump ugu guuldaraysato marka xogtu weynaato, waa inaan eegnaa sida ay u shaqeyso. mysqldump waxay samaysaa kaydin macquul ah (logical backups). Waxay waydiisaa matoorka xogta, akhridaa xogta, waxayna u beddeshaa taxane ah weedho SQL ah (gaar ahaan CREATE TABLE iyo INSERT INTO).

In kasta oo tani ay abuurayso fayl si fudud loo qaadi karo oo bini’aadamku akhrin karo, waxay keentaa caqabado waaweyn oo ku yimaada jawiga xogta badan.

1. Caqabadda Hal-qulqul (Single-Threaded Bottleneck)

Sida loo naqshadeeyay, mysqldump waa hawl hal-qulqul ah. Waxay hal mar ka shaqaysaa hal miis (table), saf saf. In kasta oo qalabka casriga ah ay leeyihiin tobanaan CPU cores iyo kaydinta NVMe oo awood u leh inay xog badan ka shaqeeyaan ilbiriqsi kasta, mysqldump waxay isticmaashaa qayb yar oo ka mid ah kheyraadkaas.

Xitaa marka la isticmaalayo calaamadaha caadiga ah ee miisaska InnoDB:

mysqldump -u root -p --single-transaction --routines --triggers --events --quick production_db > backup.sql

Calaamadda --quick waxay ku qasbaysaa mysqldump inay safafka mid mid u soo saarto halkii ay ku kaydin lahayd miiska oo dhan xusuusta (memory), taas oo ka hortagaysa khaladaadka Out of Memory (OOM) dhinaca macmiilka. Si kastaba ha ahaatee, dabeecadda hal-qulqulka ah waxay la macno tahay in xog 500GB ah ay qaadan karto 10 ilaa 15 saacadood in la kaydiyo, taas oo si weyn u saameynaysa Ujeeddadaada Soo-kabashada (RPO).

2. Wasakhaynta InnoDB Buffer Pool

Marka mysqldump ay akhrido saf kasta oo miis kasta ah, waxay ku qasbaysaa matoorka MySQL inuu xogtaas ka soo raro diskiga una raro InnoDB buffer pool. Jawiga wax-soo-saarka, buffer pool-kaaga waxaa si taxadar leh loogu buuxiyay xogtaada “kulul” ee aad isticmaasho.

Kaydin macquul ah oo weyn ayaa nadiifin doona buffer pool-ka, iyadoo ka saaraysa tusmooyinka iyo bogagga xogta ee inta badan la galo si loogu banneeyo xogta qabow ee la kaydinayo. Tani waxay keentaa kor u kac weyn oo degdeg ah oo ku yimaada disk I/O maadaama su’aalaha wax-soo-saarka lagu qasbo inay ka akhriyaan diskiga, taas oo keenta dib-u-dhac weyn oo codsiga ah.

3. Qufulka Metadata iyo Khilaafaadka DDL

Si loo ilaaliyo joogtaynta, DBAs waxay ku tiirsan yihiin calaamadda --single-transaction, taas oo dejisa heerka go’doominta macaamilka (transaction isolation level) REPEATABLE READ waxayna bilaabaysaa macaamil ka hor inta aan la kaydin xogta.

In kasta oo tani ay ka fogaanayso qufulka akhrinta ee heerka miiska (FLUSH TABLES WITH READ LOCK), kama ilaaliso isbeddellada Luuqadda Qeexidda Xogta (DDL). Haddii amar ALTER TABLE, DROP TABLE, ama TRUNCATE TABLE lagu fuliyo miis inta mysqldump ay socoto, kaydintu waxay ku burburi doontaa qalad ah table definition has changed, please retry transaction. Jawiga CI/CD ee leh socdaal-beddelka schema-ga oo joogto ah, tani waxay keentaa guuldarrooyin kaydin oo joogto ah.

4. RTO Nightmare: Waqtiyada Soo-celinta

Guuldarada ugu weyn ee mysqldump laguma ogaado inta lagu jiro kaydinta, laakiin inta lagu jiro soo-celinta.

Soo-celinta kaydin macquul ah waxay u baahan tahay matoorka MySQL inuu falanqeeyo oo fuliyo malaayiin amarada INSERT ah. Saf kasta oo la geliyo, MySQL waa inuu:
* Hubiyaa xaddidaadaha (Foreign Keys, Unique Keys).
* Dib u dhisaa tusmooyinka labaad (secondary indexes) inta uu socdo.
* Ku qoraa InnoDB redo log.
* Ku shubaa binlog (haddii la hawlgeliyay).

Soo-celinta xog 1TB ah oo ka timid kaydin macquul ah waxay qaadan kartaa dhowr maalmood. Haddii ganacsigaagu leeyahay RTO ah 4 saacadood, mysqldump waxay dammaanad qaadaysaa inaad ku guuldaraysato Heshiiska Heerka Adeegga (SLA).

Beddelka Heerka Ganacsi: U guurista Kaydinta Jireed

Si loo gaaro kaydin iyo soo-celin degdeg ah oo loogu talagalay xogta waaweyn, waa inaad ka tagtaa kaydinta macquulka ah oo aad doorataa kaydinta jireed (physical backups).

Kaydinta jireed waxay si buuxda u dhaaftaa matoorka fulinta SQL ee MySQL. Taa beddelkeeda, waxay nuqul ka sameeyaan faylasha xogta binary-ga ee hoose (faylasha .ibd, redo logs, iyo undo logs) si toos ah uga yimaada nidaamka faylasha. Maadaama ay yihiin kaliya nuqul-samaynta faylasha, waxay ku shaqayn karaan xawaaraha ugu sarreeya ee akhrinta/qorista ee qalabkaaga kaydinta waxaana si weyn loogu samayn karaa isbarbar-dhig (parallelized).

Percona XtraBackup: Heerka Warshadaha

Matoorada InnoDB iyo XtraDB, Percona XtraBackup waa qalabka ugu horreeya ee kaydinta jireed ee il-furan (open-source). Waxay samaysaa kaydin kulul oo aan xannibin (non-blocking) ee xogta MySQL.

Sida XtraBackup u Shaqeyso

  1. Nuqul-samaynta Xogta: XtraBackup waxay bilaabaysaa nuqul-samaynta faylasha xogta InnoDB (.ibd).
  2. Raadraaca Log-ga: Maadaama xogta ay nooshahay, xogtu way isbeddeli doontaa inta faylasha la nuqul-samaynayo. XtraBackup waxay abuurtaa qulqul-shaqo (thread) gadaal ka shaqeeya oo kormeera oo nuqul-sameeya InnoDB redo log (ib_logfile0, iwm.) wixii macaamil ah ee dhaca inta lagu jiro daaqadda kaydinta.
  3. Diyaarinta (Soo-kabashada Burburka): Kaydinta ka dib, faylasha xogta ee la nuqul-sameeyay waxay ku jiraan xaalad aan joogto ahayn. XtraBackup waxay ku dabaqdaa redo logs-ka la nuqul-sameeyay faylasha xogta (sida MySQL u samayso soo-kabashada burburka marka la bilaabayo), taas oo keenta sawir (snapshot) si buuxda u joogto ah oo xogta ah xilligii saxda ahaa ee kaydintu dhammaatay.

Hirgelinta Xeeladda Kaydinta Jireed

Waa kan hage farsamo oo ku saabsan hirgelinta xeeladda kaydinta jireed iyadoo la isticmaalayo Percona XtraBackup.

Tallaabada 1: Qulqulka Kaydinta (Streaming the Backup)

Qorista kaydin weyn oo loo qoro diskiga maxalliga ah inta badan waxay keentaa arrimo awoodda diskiga ah. Hab-dhaqanka ugu wanaagsan wuxuu farayaa in kaydinta si toos ah loogu qulquliyo qaab kayd ah, la isku soo koobo (compress), oo loo diro meel lagu kaydiyo ama si toos ah loogu diro madal kaydin.

Isticmaalka xbstream, waxaan ku samayn karnaa isbarbar-dhig kaydinta oo aan ku soo koobi karnaa inta ay socoto:

xtrabackup --backup 
  --user=backup_user 
  --password=SecurePassword! 
  --parallel=4 
  --stream=xbstream | lz4 > /mnt/backups/mysql_prod_backup.xbstream.lz4
  • --parallel=4: Waxay isticmaashaa 4 qulqul-shaqo si ay u akhrido faylasha xogta si isbarbar-dhig ah.
  • --stream=xbstream: Waxay soo saartaa kaydinta qaabka qulqulka ee gaarka ah ee Percona.
  • lz4: Waxay bixisaa isku-koobid aad u degdeg ah oo CPU yar isticmaasha.

Tallaabada 2: Diyaarinta Kaydinta ee Soo-celinta

Ka hor inta aan la soo celin kaydin jireed, waa in la “diyaariyaa” (iyadoo la dabaqayo redo logs-ka). Marka hore, soo saar oo ka fur (decompress) qulqulka:

mkdir -p /data/restore
lz4 -d /mnt/backups/mysql_prod_backup.xbstream.lz4 | xbstream -x -C /data/restore

Marka xigta, socodsii wejiga diyaarinta. Tallaabadan waxay u baahan tahay xusuus (memory), markaa hubi in server-ku leeyahay RAM ku filan oo loo qoondeeyay:

xtrabackup --prepare --use-memory=4G --target-dir=/data/restore

Tallaabada 3: Soo-celinta Xogta

Si loo soo celiyo, tusaha xogta MySQL ee la beegsanayo waa inuu ahaadaa mid gebi ahaanba madhan. Jooji adeegga MySQL, nadiifi tusaha, oo faylasha dib ugu soo celi:

systemctl stop mysql
rm -rf /var/lib/mysql/*

xtrabackup --copy-back --target-dir=/data/restore

Ugu dambeyntii, hagaaji rukhsadaha nidaamka faylasha ka hor inta aan la bilaabin adeegga:

chown -R mysql:mysql /var/lib/mysql
systemctl start mysql

Maadaama faylasha xogta ay horay u dhisnaayeen oo tusmooyinka ay horay u diyaarsanaayeen, xogtu waxay bilaabataa isla markiiba. Soo-celin qaadan jirtay 48 saacadood iyadoo la isticmaalayo mysqldump hadda waxay qaadataa oo kaliya inta ay qaadanayso in faylasha lagu guuro shabakaddaada ama diskigaaga—taas oo inta badan RTO u dhimta daqiiqado.

Hagaajinta Soo-celinta Macquulka ah (Marka ay tahay inaad isticmaasho)

Haddii lagu qasbo inaad soo celiso kaydin macquul ah oo weyn (tusaale, u guurista noocyada waaweyn ee MySQL ama naqshadaha CPU ee kala duwan halkaas oo faylasha jireed aysan is-waafaqsanayn), waa inaad si ku-meel-gaar ah u hagaajisaa qaabeynta MySQL si aad u wanaajiso xawaaraha qorista ee weyn.

Ku dabaq goobahan my.cnf kaaga ka hor inta aanad bilaabin soo-celinta macquulka ah:

[mysqld]
# Disable binlogging temporarily if this is a standalone restore
disable_log_bin

# Delay flushing to disk to maximize write speed
innodb_flush_log_at_trx_commit = 2

# Increase buffer pool to fit as much of the working set as possible
innodb_buffer_pool_size = <Set to 70% of total RAM>

# Increase log file size to prevent aggressive checkpointing
innodb_log_file_size = 2G

# Disable doublewrite buffer (risky for prod, safe for initial load)
innodb_doublewrite = 0

Fiiro gaar ah: Had iyo jeer dib ugu celi goobahan heerarkooda caadiga ah ee ACID-compliant (innodb_flush_log_at_trx_commit = 1, innodb_doublewrite = 1) oo dib u bilow adeegga MySQL ka hor inta aanad oggolaan taraafikada wax-soo-saarka.

Otomaatig-ka iyo Sugidda Kaydinta ee CloudSave

In kasta oo qalabka sida Percona XtraBackup ay xalliyaan farsamada soo saarista xogta si hufan, xeelad dhab ah oo soo-kabashada musiibada ganacsi waxay u baahan tahay isku-dubbarid, kaydinta dibadda ee sugan, iyo maareynta wareegga nolosha. Ku tiirsanaanta qoraallada bash-ka ee gaarka ah iyo shaqooyinka cron si loo maareeyo kaydinta jireed waxay keentaa khatar sare oo ah guuldarrooyin aamusan iyo xadgudubyada u hoggaansanaanta.

Tani waa meesha isku-dhafka lakabka xogtaada iyo madal ganacsi sida CloudSave ay noqoto mid muhiim ah.

CloudSave waxay buuxisaa farqiga u dhexeeya qalabka xogta ee cayriin iyo u hoggaansanaanta ganacsiga. Iyadoo la isticmaalayo awoodaha qoraalka ka hor iyo ka dib ee CloudSave, kooxaha DevOps waxay kicin karaan XtraBackup si ay u abuuraan sawir jireed oo joogto ah. CloudSave ka dibna waxay si aan kala go ‘lahayn u qaadataa qulqulka kaydinta, waxay ku dabaqdaa sirta AES-256, waxayna ka saartaa xogta nuqullada (deduplicates) ka hor inta aysan u celin kaydinta daruuriga ah ee aan la beddeli karin.

Naqshaddan waxay hubisaa in:
1. Waxqabadka Wax-soo-saarka la ilaaliyo: Kaydintu waxay ku socotaa xawaaraha kaydinta iyada oo aan la wasakhayn InnoDB buffer pool-ka.
2. Ilaalinta Ransomware: Siyaasadaha kaydinta ee aan la beddeli karin ee gudaha CloudSave waxay ka hortagtaa jilayaasha xaasidnimada leh inay tirtiraan ama sirtaan kaydka xogtaada.
3. Haynta Otomaatiga ah: Siyaasadaha haynta ee Grandfather-Father-Son (GFS) waxaa loo maareeyaa si otomaatig ah, iyadoo la hubinayo u hoggaansanaanta madaxbannaanida xogta iyo shuruudaha xisaabinta.
4. RTO la saadaalin karo: Maadaama CloudSave ay maamusho kaydka faylasha jireed, soo-celinta xogta terabytes badan oo loo celinayo tusaale cusub ayaa si degdeg ah loo isku-dubbaridi karaa, iyadoo la gaarayo yoolalka RTO ee adag.

Gabagabo

Sii wadista isticmaalka mysqldump ee xogaha waaweyn waa khamaar ku saabsan waqtiga shaqada iyo daacadnimada xogta ururkaaga. Dabeecadda hal-qulqulka ah, wasakhaynta buffer pool-ka, iyo waqtiyada soo-celinta ee musiibada ah ayaa ka dhigaya mid aan ku habboonayn jawiga casriga ah ee xogta badan.

Adigoo u guuraya kaydinta jireed adigoo isticmaalaya qalabka sida Percona XtraBackup, oo aad isku-dubbariddo wareegga nolosha, sirta, iyo nuqul-samaynta dibadda iyada oo loo marayo madal adag sida CloudSave, waxaad u beddeshaa xeeladdaada kaydinta xogta mid ka timid mid jilicsan oo khatar ah una beddeshaa hanti adag oo heer ganacsi ah. Qiimee cabbirradaada RTO iyo RPO ee maanta—haddii soo-celintu ay qaadato waqti ka badan inta ganacsigaagu awoodi karo inuu ka maqnaado khadka, waa waqtigii aad ka tagi lahayd mysqldump.