Domanda

Ho trovato altri messaggi simili a questo, ma volevo qualche informazione in più su queste opzioni di mysqldump. Ho capito che il --single-transazione e --lock tavole sono reciprocamente esclusivi operazioni. In seguito sono le mie domande riguardanti queste opzioni.

a) Supponiamo che io ho scelto di utilizzare l'opzione --lock-tabelle. In questo caso il mysqldump acquisisce un blocco di lettura su tutti i tavoli. Quindi, qualsiasi altro processo tenta di scrivere le tabelle andrà in uno stato di blocco (di attesa). Ma se il mysqldump prende un sacco di tempo, sarebbero i processi che sono in attesa continuare ad attendere all'infinito?

Ho provato questo esperimento per esempio- Ho un programma di scrittura (JDBC) Java a una tabella di database mysql chiamato MY_TEST. Mi sono collegato a console mysql ed emettere "LOCK TABLES MY_TEST READ;" comandare manualmente. Così il processo Java ottenuto bloccato in attesa del blocco per ottenere rilasciato. La mia domanda è ci sarebbe un tempo di connessione fuori o qualsiasi problema se il blocco di lettura non viene rilasciato per lungo tempo? Ho aspettato per due minuti e non ho notato alcun errore e il processo java continuato normalmente una volta che il blocco è stato rilasciato con il comando "tabelle di sblocco". È questo comportamento specifico del driver java mysql o posso aspettarmi la stessa cosa da un programma C utilizzando il driver mysql?

b) La mia seconda domanda è l'opzione --single-transazione. Supponiamo di avere 10 tabelle InnoDB, di cui 3 tabelle sono correlate tra loro (mediante FK) e gli altri sono indipendenti, ma ancora utilizzando il motore InnoDB. Ha singola transazione si applicano solo per i 3 tavoli, che sono collegati tra loro mediante FK? o posso aspetto che lo stato dei 7 tavoli indipendenti per essere esattamente come era quando sono stati scaricati i 3 tavoli interdipendenti.

È stato utile?

Soluzione

a.) Credo che la risposta è sì, a livello mysql le connessioni aspetteranno a tempo indeterminato per mysqldump per rilasciare i blocchi di tabella. È possibile controllare questo un po 'a livello di applicazione utilizzando un pool di connessioni con una query di convalida che interroga sulle tabelle rimanere chiusi e l'impostazione del timeout per il recupero di quello che vuoi. Questo sarebbe abbastanza facile da fare in c3p0 per esempio. Tuttavia, in assenza di altre informazioni, non vorrei raccomandare questo approccio; sembra abbastanza kludgey. Non ho usato il driver mysql C quindi non posso così per certo, ma vorrei assumere un comportamento simile a Java. Tutto questo è il motivo per cui per mysqldump non è una buona opzione per un backup live di sistemi con quantità non banali di dati e di attività.

b. Tutte le tabelle di dumping saranno scaricati come parte di una singola transazione, ottenendo in tal modo una fotografia coerente per tutte le tabelle che partecipano alla discarica. relazioni chiave primaria stranieri avranno alcuna incidenza sulla transazione. Utilizzando una sola transazione è valida opzione per il backup a caldo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top