Mysql
 sql >> Database >  >> RDS >> Mysql

Come ottenere un dump corretto utilizzando mysqldump e single-transaction quando DDL viene utilizzato contemporaneamente?

Apri un mysql finestra di comando ed emettere questo comando:

mysql> FLUSH TABLES WITH READ LOCK;

Questo bloccherà tutto tabelle in tutte database su questa istanza MySQL fino a quando non emetti UNLOCK TABLES (o terminare la connessione client che contiene questi blocchi di lettura).

Per confermare ciò, puoi aprire un'altra finestra di comando e provare a eseguire un ALTER , DROP , RENAME o TRUNCATE . Questi comandi si bloccano, in attesa del rilascio del blocco di lettura. Premi Ctrl-C per terminare l'attesa.

Ma mentre le tabelle hanno un blocco di lettura, puoi comunque eseguire un mysqldump backup.

I FLUSH TABLES WITH READ LOCK comando può equivale a usare --lock-all-tables opzione di mysqldump . Non è del tutto chiaro, ma questo documento sembra supportarlo:

Entrambi FLUSH TABLES WITH READ LOCK e --lock-all-tables usa la frase "blocco lettura globale", quindi penso che sia probabile che facciano la stessa cosa. Pertanto, dovresti essere in grado di utilizzare quell'opzione per mysqldump e proteggerti da ALTER, DROP, RENAME e TRUNCATE simultanei.

Rif. il tuo commento:Quanto segue è di Guilhem Bichot nel log dei bug di MySQL a cui ti sei collegato:

Da questo, sembra che tu non possa ottenere l'accesso simultaneo durante un backup e bloccare contemporaneamente ALTER, DROP, RENAME e TRUNCATE.