Backup logico coerente di database che utilizzano i motori MyISAM e InnoDB


8

Ho una domanda relativa al backup logico dei database MySQL che utilizzano sia MyISAM che InnoDB.

L' mysqldumputilità supporta queste due opzioni:

  • --single-transazione : crea uno snapshot coerente scaricando tutte le tabelle in una singola transazione. Funziona SOLO per le tabelle archiviate nei motori di archiviazione che supportano il multiversioning (attualmente solo InnoDB) [...] L'opzione disattiva automaticamente --lock-tables.

  • -x, --lock-all-tables - Blocca tutte le tabelle in tutti i database. Ciò si ottiene prendendo un blocco di lettura globale per la durata dell'intero dump. Disattiva automaticamente --single-transazione e --lock-tables.

    • Per InnoDB, abbiamo bisogno --single-transaction

    • per MyISAM, abbiamo bisogno di: lock-table o lock-all-tables (nel caso in cui abbiamo bisogno di coerenza tra database).

Quindi, come è possibile eseguire il backup di un database ibrido (un database che utilizza sia i motori MyISAM che InnoDB)?

Modificare:

Giusto per chiarire, la domanda potrebbe essere riformulata in questo modo:

Le opzioni lock- [all-] tables garantiscono un backup coerente delle tabelle InnoDB?

Risposte:


8

Con mysqldump puoi usare in sicurezza solo --single-transactionse tutte le tue tabelle sono InnoDB, altrimenti il ​​tuo backup è incoerente.

Se hai i requisiti per un backup ibrido, allora hai bisogno di lock-tablestutte le tabelle nel backup (impostazione predefinita), che sarà sicuro per tutti i motori. Vale anche la pena ricordare che le opzioni predefinite assicureranno che il backup sia sicuro, non è necessario attivare alcun flag speciale.

Nota: se si dispone di un mix ibrido, forse guardare xtrabackup. Si bloccherà solo durante la fase MyISAM del backup.


Stavo per pubblicare questo, ma mi hai battuto. Link rilevante: percona.com/doc/percona-xtrabackup/innobackupex/…
Derek Downey

Grazie per aver confermato che le tabelle di blocco garantiscono un backup coerente per entrambi i motori. Attualmente sto guardando Zmanda Recovery Manager per MySQL (darò un'occhiata anche a xtrabackup).
Dimitre Radoulov,

Zmanda è solo un gestore della GUI per tutti gli altri metodi di backup: sono sicuro che l'utilizzo di xtrabackup sia supportato.
Morgan Tocker,

Ciao @Morgan Tocker, Zmanda fornisce anche una serie di script (zrm- *) che eseguono effettivamente vari tipi di backup: logici, grezzi e istantanee. Tutti i database che amministriamo sono ibridi, quindi è poco utile utilizzare un prodotto separato: non è possibile evitare il blocco durante il backup.
Dimitre Radoulov,

Questa risposta dice che se si utilizza mysqldump e si specifica che --lock-all-tablesil backup sarà coerente, giusto? E bisogna eseguire mysqldump solo una volta: sarà sicuro per InnoDB e MyISAM allo stesso tempo, giusto?
KajMagnus,

2

Come idea aggiuntiva per la tua situazione, forse è utile dedicare qualche pensiero alla configurazione di una configurazione master slave, in cui il backup viene effettuato dallo slave.

Un db MySQL con un mix di InnoDB e MyISAM bloccherà sempre (per quanto ne so in ogni configurazione e con ogni strumento di backup) le tabelle MyISAM per la fase di backup MyISAM.

Per evitare questo blocco, utilizzare questa configurazione:

  • Server A: mysql Master
  • Server B: mysql Slave (collegato al server A)

Tutte le scritture e le letture vanno al Server A (Master). Il server B (Slave) viene utilizzato solo per il backup. Sullo slave, si installa uno strumento di backup o uno script di propria scelta, ad esempio MySQL Administrator.

Configura il tuo backup, ad es. Ogni giorno di notte. I blocchi si trovano sullo slave, causando un ritardo mentre lo slave si blocca, ma questo ritardo viene rilevato non appena il backup è terminato e il blocco viene aperto.

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.