Best practice per il backup di un database MySQL


23

Di recente ho scoperto che il backup dei nostri server Web di produzione che eseguono MySQL non viene eseguito regolarmente (o affatto). Sono abituato a eseguire il backup dei DB di SQL Server ma non ho molta esperienza con i DB di MySQL. Qualche best practice per l'utilizzo di "mysqldump" o altri strumenti di backup del database?

Probabilmente cron farò il programma in modo che sia fatto ogni notte e quindi esegua il backup dei file con il mio sistema di backup.

Grazie.

Risposte:


29

Best practice per eseguire il backup del server MySQL:

Replica MySQL

Replica dell'installazione in MySQL. Dovrai installare il server Master e Slave. Tutte le scritture in lettura nel DB potrebbero essere indirizzate allo Slave Server. Il vantaggio di avere la replica è che puoi eseguire un backup dal tuo server slave senza interrompere il server Master, la tua applicazione continuerà a funzionare su Master senza tempi di inattività.

Utilizzando MySQL Dump

Se il tuo set di dati è piccolo (mi rendo conto che "piccolo" è un termine relativo .. per qualificarlo, diciamo <10 GB), probabilmente mysqldump funzionerà alla grande. È facile, è online ed è molto flessibile. Solo poche cose che mysqldump può fare: eseguire il backup di tutto o solo alcuni database o tabelle eseguono il backup solo del DDL ottimizza il dump per un ripristino più veloce che rende il file sql risultante più compatibile con altri RDBMS e molte altre cose.

Tuttavia, le opzioni più importanti sono correlate alla coerenza del backup. Le mie opzioni preferite sono: - Single-Transaction: questa opzione fornisce un backup coerente, se (e solo se) le tabelle utilizzano il motore di archiviazione InnoDB. Se si dispone di tabelle MyISAM non di sola lettura, non utilizzare questa opzione durante il backup. --master-data = 2: questa opzione assicurerà che il tuo dump sia coerente (facendo un lock-all-tables a meno che tu non abbia aggiunto l'opzione --single-transazione). L'opzione --master-data registra anche la posizione del registro binario nel file di dump risultante (= 2 fa sì che questa riga sia un commento nel file di dump)

Nota finale su mysqldump: tenere presente che il tempo di ripristino potrebbe essere significativamente più lungo del tempo di backup. Dipenderà da diversi fattori, ad esempio quanti indici hai.

Istantanea LVM

Per quelli che hanno set di dati più grandi, un backup fisico è la strada da percorrere. Sebbene sia possibile eseguire un backup a freddo (ad esempio, arrestare il servizio MySQL, copiare la directory dei dati, riavviare il servizio), molte persone non vogliono tempi di inattività. La mia soluzione preferita sono le istantanee. Può essere caldo (per InnoDB) o richiedere un breve blocco (per MyISAM). Non dimenticare di includere tutti i tuoi dati (includi ib_logfiles). Lenz fornisce una bella utility per aiutare con questo: http://www.lenzg.net/mylvmbackup/

Utilizzo di MySQL Enterprise Backup

Vantaggi dell'utilizzo di MySQL Enterprise Backup:

  • I backup "a caldo" delle tabelle InnoDB vengono eseguiti interamente online, senza bloccare il backup solo di tabelle o spazi di tabelle particolari
  • Esegui solo il backup dei dati modificati dopo un backup precedente
  • Compressed Backup - Risparmia fino al 90% di archiviazione e molti altri ..

Riferimento: http://www.mysql.com/products/enterprise/backup/features.html http://www.mysql.com/products/enterprise/backup.html


7

Consiglierei di impostare una replica dedicata da utilizzare per il backup. Ciò ti consentirà di eseguire qualsiasi attività di backup senza influire sul primario. Poiché ciò aggiunge complessità all'architettura, ti consigliamo di monitorare il ritardo di replica per assicurarti che tutto funzioni.

Per quanto riguarda il processo effettivo, hai un paio di opzioni senza strumenti di terze parti. Gli snapshot possono essere effettuate utilizzando la mysqldumpdi comando (supponendo che si sta utilizzando InnoDB): mysqldump --all-databases --single-transaction > all_databases.sql. A seconda della dimensione dei dati, potrebbe essere preferibile chiudere MySQL e eseguire il backup dei file di dati direttamente. Quando viene riavviata, la replica riprodurrà tutti gli eventi ricevuti dal primario nella durata in cui era inattivo. Se stai usando MySQL Enterprise l' mysqlbackuputility lo fa.

È possibile eseguire backup incrementali abilitando il registro binario sulla replica. Ovviamente, questo registra solo eventi che mutano i dati, quindi dovrai combinarli con le istantanee sopra.


3
+1 per --single-transactionma non dimenticare di aggiungere --events --routinese lo uso sempre --triggers, anche se è abilitato per impostazione predefinita, poiché può essere disabilitato in my.cnf. Direi che è quasi sempre buono usarli come pratica standard, sia che tu abbia attualmente questi tipi di oggetti nel tuo database o meno.
Michael - sqlbot,

Nota mysqldump: tutti i database potrebbero innescare errori quando è stata definita un'impostazione di tabelle aperte max basse. quindi tieni d'occhio il tuo mysql.log. La replica sarebbe davvero il miglior modo di backup
Raymond Nijland,

In che modo conservi copie storiche dei dati? (Spesso un client vorrà conservare un mese o più di backup e quando un bug dell'applicazione corrompe i dati, gli sviluppatori vogliono una copia del db prima del bug.)
RonJohn,
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.