Le tabelle InnoDB sono state bloccate durante mysqldump se mescolate con MyISAM?


9

Sto cercando una soluzione di backup per i miei server mysql e ho bisogno di meno tempi di inattività possibili. Ho il seguente:

  • Server MySQL
  • non vengono replicati
  • ogni server rappresenta il suo

Questo numero può aumentare, quindi impostare una replica master / slave non sarà una buona idea.

Il modo più semplice per il backup, come vedo, sarebbe usare mysqldump con un software come "automysqlbackup". I miei dati più importanti usano InnoDB. I miei tavoli InnoDB sono piuttosto pesanti.

La domanda è: se faccio un mysqldump a tutti i database nel server, bloccherà le mie tabelle Innodb?

Risposte:


7

mysqldumps con InnoDB e MyISAM insieme sono considerati reciprocamente esclusivi. Ecco perché:

Se riesci ad accedere a mysql mentre è in corso un mysqldump, vedrai qualcosa del genere:

SELECT /* SQL_NO_CACHE */ * FROM tblname

Per impostazione predefinita, mysqldump eseguirà le seguenti operazioni:

  • Ogni database viene scaricato in ordine alfabetico
  • Ogni tabella scaricata per database viene scaricata in ordine alfabetico (indipendentemente dal motore di archiviazione)

Questo dovrebbe andare bene per un'istanza MySQL che non ha altre attività di database. Le tabelle InnoDB e le tabelle MyISAM non si influenzano a vicenda.

L'uso --single-transactioncontro un'istanza MySQL all-InnoDB crea un checkpoint e scarica tutte le tabelle dallo stesso punto temporale. Quando viene rilevata una tabella MyISAM, tutte le scommesse vengono disattivate. Potrebbe causare il dump di tutte le tabelle InnoDB dopo MyISAM da un punto temporale diverso.

Per disporre di un dump temporizzato coerente per una combinazione di InnoDB e MyISAM, sono disponibili opzioni

OPZIONE 1

Riavvia mysql in modo che nessun altro possa accedere tramite TCP / IP e quindi mysqldump

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

OPZIONE 2

Se tutte le tabelle MyISAM sono di sola lettura, basta usare mysqldump usando --single-transazione

OPZIONE # 3

Se vengono scritte delle tabelle MyISAM, la transazione singola non è sufficiente

Dovrai fare quanto segue:

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

Immediatamente dopo aver completato mysqldump, accedi a mysql ed esegui show processlist;. Cerca la query SELECT SLEEP(86400), trova l'ID processo ed eseguiKILL <procidnumn>;


5

mysqldump --single-transactionnon blocca le tabelle ma non è garantito che le tabelle MyISAM abbiano dump coerenti con questa opzione. È meglio usare mydumper, mydumperblocca le tabelle MyISAM e non blocca InnoDB, quindi il dump è coerente.


Caspita, grazie per questo fantastico strumento! Conosci uno strumento in grado di automatizzare backup giornalieri, settimanali e mensili con mydumper? Qualcosa come "automysqlbackup", solo con mydumper? Grazie.
tounano,

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.