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.

Sekuyiminyaka eminingi, i-mysqldump ibilokhu iyithuluzi elibalulekile lokwenza izipele (backups) zemininingo-gcinwa (databases) ye-MySQL. Isetshenziswa kabanzi, ilula, futhi iza ifakiwe kuwo wonke ama-distribution e-MySQL ne-MariaDB. Ezindaweni zokugcina imininingwane ezincane kuya kweziphakathi, isebenza kahle kakhulu.

Nokho, njengoba izinhlangano zikhula futhi imininingwane idlula umkhawulo we-100GB, 500GB, noma ama-terabyte amaningi, ukuthembela ku-mysqldump kushintsha kusuka ekubeni indlela engcono kuye ekubeni ubungozi obukhulu bezakhiwo zohlelo. Uma ungunjiniyela we-DBA noma we-DevOps ophethe imininingo-gcinwa emikhulu yokukhiqiza, kungenzeka ukuthi wake wahlangabezana nokwehluleka okungazelelwe, ukwehla kwekhwalithi yokusebenza, kanye nezikhathi zokubuyisela (Recovery Time Objectives – RTO) ezingamukeleki ezihambisana nalezi zipele ezinengqondo (logical dumps).

Kulesi sihloko, sizohlaziya imikhawulo yezakhiwo ze-mysqldump, sihlolisise ukuthi kungani yehluleka uma isetshenziswa kumanani amakhulu, futhi sichaze indlela yokusebenzisa amasu okwenza izipele ezibonakalayo (physical backups) asezingeni lebhizinisi ukuze uvikele imininingwane yakho ebalulekile.

Imikhawulo Yezakhiwo ze-mysqldump

Ukuze uqonde ukuthi kungani i-mysqldump yehluleka kumanani amakhulu, kumele sibheke ukuthi isebenza kanjani ngaphansi. I-mysqldump yenza izipele ezinengqondo (logical backups). Ibuza injini yemininingo-gcinwa, ifunde imininingwane, bese iyiguqulela ochungechungeni lwemiyalo ye-SQL (ikakhulukazi i-CREATE TABLE ne-INSERT INTO).

Nakuba lokhu kudala ifayela eliphathekayo nelifundeka kalula, kudala izingqinamba ezinkulu ezindaweni ezisebenza kakhulu.

1. Inkinga Yokusebenza Ngomugqa Owodwa (Single-Threaded Bottleneck)

Ngokwakhiwa kwayo, i-mysqldump isebenza ngomugqa owodwa kuphela. Isebenza ngethebula elilodwa ngesikhathi, umugqa ngomugqa. Nakuba izinsiza-kusebenza zanamuhla zinezinhlamvu (CPU cores) eziningi kanye ne-NVMe storage ekwazi ukufunda ama-gigabyte amaningi ngomzuzwana, i-mysqldump isebenzisa ingxenye encane yalezi zinsiza.

Ngisho noma usebenzisa ama-flag ajwayelekile wamathebula e-InnoDB:

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

I-flag ethi --quick iphoqa i-mysqldump ukuthi ilande imigqa ngamunye ngamunye esikhundleni sokugcina ithebula lonke enkumbulweni (memory), okuvimbela amaphutha e-Out of Memory (OOM) ohlangothini lwekhasimende. Nokho, ukusebenza ngomugqa owodwa kusho ukuthi imininingo-gcinwa engu-500GB ingathatha amahora ayi-10 kuya kwayi-15 ukwenziwa, okuthinta kabi i-Recovery Point Objective (RPO) yakho.

2. Ukungcoliswa kwe-InnoDB Buffer Pool

Uma i-mysqldump ifunda wonke umugqa wetafula ngalinye, iphoqa injini ye-MySQL ukuthi ilayishe leyo mininingwane kusuka kudiski iye ku-InnoDB buffer pool. Endaweni yokukhiqiza, i-buffer pool yakho ilayishwe ngokucophelela ngemininingwane yakho “eshisayo” (hot working dataset).

Izipele ezinkulu ezinengqondo zizoshanela i-buffer pool, zisuse ama-index nemininingwane esetshenziswa njalo ukuze kwenziwe indawo yemininingwane ebandayo ebuyiselwayo. Lokhu kuholela ekukhuphukeni okukhulu nokungazelelwe kokusetshenziswa kwediski (disk I/O) njengoba imibuzo yokukhiqiza iphoqeleka ukuthi ifunde kudiski, okubangela ukubambezeleka okukhulu kohlelo lokusebenza.

3. Izikhiye ze-Metadata kanye nezingxabano ze-DDL

Ukuze kugcinwe ukuhambisana, ama-DBA athembele ku-flag ethi --single-transaction, ebeka izinga lokuhlukaniswa kokuthengiselana (transaction isolation level) ku-REPEATABLE READ futhi iqale ukuthengiselana ngaphambi kokukhipha imininingwane.

Nakuba lokhu kugwema izikhiye zokufunda zethebula (FLUSH TABLES WITH READ LOCK), akukuvikeli ekushintsheni kwe-Data Definition Language (DDL). Uma umyalo we-ALTER TABLE, DROP TABLE, noma TRUNCATE TABLE wenziwa ethebuleni ngenkathi i-mysqldump isebenza, isipele sizophahlazeka ngephutha elithi table definition has changed, please retry transaction. Ezindaweni ze-CI/CD lapho kuhlale kushintshwa izakhiwo zemininingwane, lokhu kubangela ukwehluleka okuqhubekayo kwezipele.

4. Iphupho elibi le-RTO: Izikhathi Zokubuyisela

Ukwehluleka okubi kakhulu kwe-mysqldump akubonakali ngesikhathi sokwenza isipele, kodwa ngesikhathi sokubuyisela (restore).

Ukubuyisela isipele esinengqondo kudinga ukuthi injini ye-MySQL ihlaziye futhi yenze izigidi zemiyalo ye-INSERT. Ngomugqa ngamunye ofakiwe, i-MySQL kumele:
* Ihlole imikhawulo (Foreign Keys, Unique Keys).
* Yakhe kabusha ama-secondary index ngesikhathi esisodwa.
* Ibhale ku-InnoDB redo log.
* I-flush ku-binlog (uma ivuliwe).

Ukubuyisela imininingo-gcinwa engu-1TB kusuka kusipele esinengqondo kungathatha izinsuku ezimbalwa. Uma ibhizinisi lakho line-RTO yamahora ama-4, i-mysqldump iqinisekisa ukuthi uzohluleka ukuhlangabezana ne-Service Level Agreement (SLA) yakho.

Ezinye Izindlela Zezinga Lebhizinisi: Ukuthuthela Kwezipele Ezibonakalayo

Ukuze uzuze izipele nokubuyisela okusheshayo kumininingwane emikhulu, kumele ushiye izipele ezinengqondo (logical backups) ukuze usebenzise izipele ezibonakalayo (physical backups).

Izipele ezibonakalayo zeqa injini yokwenza imiyalo ye-SQL ye-MySQL ngokuphelele. Esikhundleni salokho, zikopisha amafayela emininingwane angaphansi (amafayela e-.ibd, ama-redo logs, nama-undo logs) ngokuqondile kusuka kufayela lesistimu. Ngenxa yokuthi zikopisha amafayela nje, zingasebenza ngejubane eliphezulu kakhulu lokufunda/ukubhala lezinsiza-kusebenza zakho zokugcina futhi zingahlukaniswa zibe yizingxenye eziningi ezisebenza ngesikhathi esisodwa.

Percona XtraBackup: Izinga Lemboni

Ezinjini ze-InnoDB ne-XtraDB, i-Percona XtraBackup iyithuluzi elihamba phambili lokwenza izipele ezibonakalayo elivulekile (open-source). Yenza izipele ezishisayo (hot backups) ezingavimbi ukusebenza kwemininingo-gcinwa ye-MySQL.

Indlela i-XtraBackup Esebenza Ngayo

  1. Ukukopisha Imininingwane: I-XtraBackup iqala ukukopisha amafayela emininingwane ye-InnoDB (.ibd).
  2. Ukulandelela I-Log: Ngenxa yokuthi imininingo-gcinwa iyasebenza, imininingwane izoshintsha ngenkathi amafayela ekopishwa. I-XtraBackup iqala umugqa ongemuva (background thread) oqapha futhi ukopishe i-InnoDB redo log (ib_logfile0, njll.) yanoma yikuphi ukuthengiselana okwenzeka phakathi nesikhathi sokwenza isipele.
  3. Ukulungiselela (Crash Recovery): Ngemuva kwesipele, amafayela emininingwane akopishiwe aba sesimweni esingahambisani. I-XtraBackup isebenzisa ama-redo logs akopishiwe emafayeleni emininingwane (okufana nendlela i-MySQL eyenza ngayo ukubuyisela emuva ngemuva kokuphahlazeka lapho iqala), okuholela esithombeni esihambisana ngokuphelele semininingo-gcinwa ngesikhathi esiqondile isipele esiqedwe ngaso.

Ukuqalisa Isu Lezipele Ezibonakalayo

Nansi indlela yobuchwepheshe yokuqalisa isu lezipele ezibonakalayo usebenzisa i-Percona XtraBackup.

Isinyathelo 1: Ukusakaza Isipele (Streaming the Backup)

Ukubhala isipele esikhulu kudiski yendawo kuvame ukudala izinkinga zomthamo. Indlela engcono kakhulu ukusakaza isipele ngokuqondile kufomethi yokugcina (archive format), ukusifinyeza, nokusithumela endaweni yokugcina noma ngokuqondile endaweni yesikhulumi sezipele.

Usebenzisa i-xbstream, singenza isipele sibe yizingxenye eziningi futhi sisifinyeze ngesikhathi esisodwa:

xtrabackup --backup 
  --user=backup_user 
  --password=SecurePassword! 
  --parallel=4 
  --stream=xbstream | lz4 > /mnt/backups/mysql_prod_backup.xbstream.lz4
  • --parallel=4: Isebenzisa imigqa emi-4 ukufunda amafayela emininingwane ngesikhathi esisodwa.
  • --stream=xbstream: Ikhipha isipele ngefomethi yokusakaza yangokwezifiso ye-Percona.
  • lz4: Inikeza ukufinyeza okusheshayo kakhulu nokusebenzisa i-CPU encane.

Isinyathelo 2: Ukulungiselela Isipele Sokubuyisela

Ngaphambi kokuthi isipele esibonakalayo sibuyiselwe, kumele “silungiswe” (ukusebenzisa ama-redo logs). Okokuqala, khipha futhi wandise umthamo wokusakaza:

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

Okulandelayo, qala isigaba sokulungiselela. Lesi sinyathelo sidinga inkumbulo (memory), ngakho qinisekisa ukuthi iseva inayo i-RAM eyanele:

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

Isinyathelo 3: Ukubuyisela Imininingo-gcinwa

Ukuze ubuyisele, umkhombandlela (directory) wemininingwane ye-MySQL okuyiwa kuwo kumele ube yize ngokuphelele. Misa isevisi ye-MySQL, sula umkhombandlela, bese ukopisha amafayela emuva:

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

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

Okokugcina, lungisa izimvume zefayela lesistimu ngaphambi kokuqala isevisi:

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

Ngenxa yokuthi amafayela emininingwane asevele akhiwe nama-index asevele ahlanganisiwe, imininingo-gcinwa iqala ngokushesha. Ukubuyisela okwathatha amahora angama-48 nge-mysqldump manje kuthatha isikhathi esilingana nokukopisha amafayela kunethiwekhi yakho noma kudiski—okuvame ukunciphisa i-RTO ibe yimizuzu.

Ukuthuthukisa Ukubuyiselwa Okunengqondo (Lapho Kumele Uzisebenzise)

Uma uphoqelekile ukubuyisela isipele esikhulu esinengqondo (isb., ukuthuthela phakathi kwezinguqulo ezinkulu ezihlukene ze-MySQL noma izakhiwo ze-CPU ezihlukene lapho amafayela abonakalayo engahambisani khona), kumele ulungise isikhashana ukucushwa kwe-MySQL yakho ukuze uthuthukise ukubhala okukhulu.

Sebenzisa lezi zilungiselelo ku-my.cnf yakho ngaphambi kokuqala ukubuyisela okunengqondo:

[mysqld]
# Khubaza i-binlogging isikhashana uma lokhu kuwukubuyisela okuzimele
disable_log_bin

# Libazisa ukuflushela kudiski ukuze uthuthukise ijubane lokubhala
innodb_flush_log_at_trx_commit = 2

# Khulisa i-buffer pool ukuze ilingane nengxenye enkulu yemininingwane esetshenziswayo
innodb_buffer_pool_size = <Set to 70% of total RAM>

# Khulisa usayizi wefayela le-log ukuze uvimbele ukuhlola okunamandla
innodb_log_file_size = 2G

# Khubaza i-doublewrite buffer (kuyingozi ekukhiqizeni, kuphephile ekulayisheni kokuqala)
innodb_doublewrite = 0

Qaphela: Njalo buyisela lezi zilungiselelo kuzimiso zazo ezihambisana ne-ACID (innodb_flush_log_at_trx_commit = 1, innodb_doublewrite = 1) bese uqala kabusha isevisi ye-MySQL ngaphambi kokuvumela ithrafikhi yokukhiqiza.

Ukuzenzakalela Nokuvikela Izipele nge-CloudSave

Nakuba amathuluzi afana ne-Percona XtraBackup exazulula imishini yokukhipha imininingwane ngempumelelo, isu langempela lokubuyisela ezingozini zebhizinisi lidinga ukuhlelwa, ukugcinwa okuphephile ngaphandle kwesayithi, kanye nokuphathwa komjikelezo wempilo. Ukuthembela emibhalweni ye-bash yangokwezifiso kanye nemisebenzi ye-cron ukuphatha izipele ezibonakalayo kuletha ubungozi obukhulu bokwehluleka okuthulile kanye nokwephulwa kwemithetho.

Yilapho ukuhlanganisa ungqimba lwakho lwemininingo-gcinwa nesikhulumi sebhizinisi esifana ne-CloudSave kuba kubalulekile.

I-CloudSave ivala igebe phakathi kwezinsiza zemininingo-gcinwa eluhlaza kanye nokuhambisana kwebhizinisi. Ngokusebenzisa amakhono e-CloudSave angaphambi nangemva kwemibhalo, amaqembu e-DevOps angabangela i-XtraBackup ukuthi ikhiqize isithombe esibonakalayo esihambisanayo. I-CloudSave bese ithatha ukusakaza kwesipele ngaphandle komthungo, isebenzise ukubethela kwe-AES-256, futhi isuse imininingwane ephindaphindwayo ngaphambi kokuphindaphinda lokho kugcinwa kwemininingwane efwini elingenakushintshwa.

Le zakhiwo iqinisekisa ukuthi:
1. Ukusebenza Kokukhiqiza Kuyagcinwa: Izipele zisebenza ngesivinini sokugcina ngaphandle kokungcolisa i-InnoDB buffer pool.
2. Ukuvikelwa ku-Ransomware: Izinqubomgomo zokugcina ezingenakushintshwa ngaphakathi kwe-CloudSave zivimbela abenzi bobubi ekususeni noma ekubetheleni ama-archive emininingo-gcinwa yakho.
3. Ukugcinwa Okuzenzakalelayo: Izinqubomgomo zokugcina ze-Grandfather-Father-Son (GFS) ziphathwa ngokuzenzakalelayo, kuqinisekiswe ukuhambisana nezidingo zobukhosi bemininingwane kanye nokucwaninga.
4. I-RTO Ebikezelwayo: Ngenxa yokuthi i-CloudSave iphatha ama-archive amafayela abonakalayo, ukubuyisela imininingo-gcinwa yama-terabyte amaningi kusenzakalo esisha kungahlelwa ngokushesha, kuhlangatshezwane nezinhloso eziqinile ze-RTO.

Isiphetho

Ukuqhubeka nokusebenzisa i-mysqldump kumininingo-gcinwa emikhulu kuwukugembula ngokusebenza kwebhizinisi lakho kanye nobuqotho bemininingwane. Ukusebenza ngomugqa owodwa, ukungcoliswa kwe-buffer pool, kanye nezikhathi zokubuyisela ezibhubhisayo kwenza kungafaneleki ngokuyisisekelo ezindaweni zanamuhla ezisebenza kakhulu.

Ngokuthuthela ezipele ezibonakalayo usebenzisa amathuluzi afana ne-Percona XtraBackup, nokuhlela umjikelezo wempilo, ukubethela, kanye nokuphindaphinda ngaphandle kwesayithi ngokusebenzisa isikhulumi esiqinile esifana ne-CloudSave, uguqula isu lakho lezipele zemininingo-gcinwa lisuke ekubeni yisikweletu esibuthakathaka liye ekubeni impahla eqinile yebhizinisi. Hlola izilinganiso zakho zamanje ze-RTO ne-RPO namuhla—uma ukubuyisela kuthatha isikhathi eside kunalokho ibhizinisi lakho elingakwazi ukukubekezelela ukungasebenzi, yisikhathi sokushiya i-mysqldump ngemuva.