Modo ottimale per eseguire backup MySQL per database abbastanza grandi (MyISAM / InnoDB)


8

Attualmente abbiamo un database MySQL robusto che gestisce un paio di siti Web basati su Django ad alto traffico, nonché alcuni siti Web di e-commerce di dimensioni decenti. Di conseguenza abbiamo una buona quantità di database di grandi dimensioni che utilizzano sia le tabelle InnoDB che MyISAM.

Purtroppo recentemente abbiamo colpito un muro a causa della quantità di traffico, quindi ho installato un altro server principale per alleviare letture / backup.

Ora al momento uso semplicemente mysqldump con alcuni argomenti ed è stato dimostrato che va bene .. fino ad ora. Ovviamente mysqldump è un metodo lento e lento, tuttavia credo che ne abbiamo superato il suo utilizzo. Ora ho bisogno di una buona alternativa e ho cercato di utilizzare l'utilità mk-parallel-dump di Maatkits o una soluzione di snapshot LVM.

Versione breve succinta:

  • Ho un database MySQL abbastanza grande di cui ho bisogno per il backup
  • Il metodo corrente che utilizza mysqldump è inefficiente e lento (causa problemi)
  • Esaminare qualcosa come mk-parallel-dump o snapshot LVM

Eventuali raccomandazioni o idee sarebbero apprezzate - dal momento che devo rifare il modo in cui stiamo facendo le cose, piuttosto ho fatto in modo corretto / più efficiente :).

Risposte:


5

Ho avuto un buon successo con la replica di MySQL e i tarball notturni. Per i db più piccoli, il database mysql e lo schema utilizzo una combinazione di script progettati per utilizzare mysqlhotcopy e mysqldump.

Il backup a caldo di InnoDB è un ottimo prodotto commerciale ma non sono sicuro di come gestisca le tabelle miste nello stesso database. La raccomandazione di pQd per XtraBackup potrebbe essere buona da confrontare con questo.

Ad altri piacciono le istantanee LVM e direi che è sicuramente qualcosa da considerare. In definitiva, una combinazione di soluzioni sarebbe probabilmente la migliore.

È anche notevole questo è un vecchio argomento. Tra il libro MySQL ad alte prestazioni , il manuale MySQL e le precedenti domande ServerFault, questo è stato esaurito su base generale. Vedere:


+1; con myisam non sai mai se hai un backup logicamente coerente [preso da lvm / mysqldump / da lave] o no. forse se l'applicazione cambia solo durante l'orario di lavoro - puoi scaricarla in sicurezza di notte, altrimenti - non sei mai sicuro e nessun metodo ti aiuterà.
pQd

Penso che tu abbia ragione nel mescolare soluzioni. Come menzionato nella risposta di pQd, probabilmente prenderò le istantanee LVM e guarderò l'utility xtrabackup (dice che può gestire tabelle miste). Ho esaminato il backup caldo di InnoDB ma sono sempre uno per i progetti open source. Grazie per i riferimenti, ne ho esaminato 2 ma le risposte sono piuttosto generiche / non risolvono i problemi che sto riscontrando / si riferiscono a database più "normali" e "banali".
WinkyWolly,

4

xtrabackup - almeno per innodb.


Interessante, tuttavia, vorrei una soluzione più elegante per non preoccuparmi del mio mix di tabelle InnoDB / MyISAM.
WinkyWolly,

xtrabackup viene fornito con uno script che può aiutarti anche a fare il backup di myisams, ma controlla il mio commento sotto il post di Warner
pQd

Grazie, sembra che potrei andare in questa direzione e mescolare istantanee LVM per una buona misura. Indica che può "gestire" anche le tabelle MyISAM tramite lo script "innobackupex". Suppongo che lo farò girare e vedere esattamente cosa succede.
WinkyWolly,

3

Il modo più comune per risolvere questo problema è configurare un altro server MySQL, che può trovarsi sulla stessa macchina ed eseguire la replica master / slave. È quindi possibile eseguire il backup sullo slave, senza impatto sul master.


0

Su EC2 EBS, sto usando xfs_freeze. Sto cercando di passare a xtrabackup a un certo punto, ma quando ho fatto un primo test era molto, molto affamato di CPU.


Purtroppo al momento utilizzo XFS solo su server multimediali, quindi non è un'opzione. Che tipo di esperienza (a parte la fame di CPU, forse più dettagli?) Hai avuto con xtrabackup? Stavi eseguendo il backup di tabelle InnoDB pure o di un mix?
WinkyWolly,

La mia più grande esitazione è stata il fatto di aver masticato la CPU per circa 30 minuti mentre veniva completato (eseguendo il backup di un DB di circa 35 GB di dati), rendendo il server DB solo marginalmente funzionale - certamente non qualcosa che probabilmente avrei eseguito su un master di produzione . A questo scopo avevo già convertito parzialmente le mie restanti poche tabelle MyISAM in InnoDB. Penso che probabilmente sarebbe OK funzionare su uno slave purché non causi un sostanziale ritardo della replica.
user5336

0

Se stai eseguendo la replica di un database condiviso tra le applicazioni, sembra che ci sia una domanda ovvia se puoi migliorare le prestazioni di molte cose, inclusi i backup, dedicando i server di database alle app. Condividere è bello, fino a quando non lo è.


0

Se stai conservando le tue tabelle MyISAM solo per motivi legacy (non ti sei preoccupato di modificarle), ecco cosa uso per risolvere facilmente:

    mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

È possibile escludere e includere database con il regex di awk come solo dbs che inizia con una lettera minuscola nel mio esempio sopra. Questo ovviamente bloccherà i tavoli durante l'alterazione.

Quindi utilizzare xtrabackup per copiare l'intero database direttamente su un altro server senza bloccare alcuna tabella o utilizzando troppa I / O del disco (dopo aver impostato le chiavi ssh rsa):

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh user@otherhost "xbstream -x -C /root/backup/"

e quindi è possibile eseguire il passaggio del registro di applicazione completamente separato e risparmiare spazio su disco, IO e CPU sul server di produzione.

HowTO di Percona per l'utilizzo di xtrabackup

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.