Mysqldump aggiungere drop table?

22 ago 2012, 17:02:14
Visualizzazioni: 47.4K
Voti: 12

Ho notato nel Codex che l'opzione --add-drop-table viene mostrata per il backup di un database. Prima di combinare pasticci, questo significa semplicemente che quando il backup verrà eventualmente importato, le tabelle verranno sovrascritte se esistono nel database di destinazione?

Non voglio eliminare le tabelle quando faccio il backup!

user@linux:~/files/blog> mysqldump --add-drop-table -h mysqlhostserver
 -u mysqlusername -p databasename (tablename tablename tablename) | bzip2
 -c > blog.bak.sql.bz2

Enter password: (inserisci la tua password mysql)
user@linux~/files/blog>

http://codex.wordpress.org/Backing_Up_Your_Database#Using_Straight_MySQL_Commands

0
Tutte le risposte alla domanda 4
1
12

Influenza solo l'output del tuo dump MySQL nel file che viene creato.

Non è necessario. È presente solo in modo che, se importi il file di dump creato in un database che già contiene una tabella con lo stesso nome, questa verrà eliminata e poi verrà aggiunta la nuova tabella al suo posto. Altrimenti otterrai un errore e il file di dump non verrà importato.

Aggiunge questa riga prima dell'istruzione di creazione della tabella nel file di dump:

DROP TABLE IF EXISTS `nometabella`;

Se intendi importare il file di dump in un database vuoto, non avrà alcuna importanza.

23 ago 2012 04:17:58
Commenti

Sai cosa c'è di interessante? Anche se uso il dump senza l'opzione add-drop-table su un database WP esistente, funziona comunque bene.

AlxVallejo AlxVallejo
22 set 2012 20:33:11
0

Questo perché la sintassi generale è qualcosa del tipo:

mysql>mysqldump --opt --all-databses > all.sql

--opt è abilitato di default (il che implica: --add-drop-table) come menzionato nella documentazione di MySQL.

14 apr 2013 01:57:27
0

Quando rimuovi --add-drop-table in questa sintassi, --add-drop-table viene comunque utilizzato, perché --opt è predefinito (a meno che non usi --skip-opt) e --opt include --add-drop-table. Vedi qui: https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html#option_mysqldump_opt

E, come detto sopra, non significa che le tue tabelle vengano eliminate quando esegui il backup, ma che i comandi per eliminare le tabelle sono inclusi nel file sql, perché è ciò che vuoi per un dump, in modo da poter importare il dump senza ottenere errori che le tabelle esistono già.

7 feb 2018 12:00:03
0

Sì, questo farebbe esattamente quello che dice, cioè eliminerebbe la tabella se già esistente. Ricorda che stai creando un dump che verrà importato (con due scenari);

  1. nel caso di creazione di un database (o tabella) nuovo, l'istruzione drop table non fa differenza, perché non c'è nessuna tabella da eliminare in primo luogo.

  2. Ma per saltare l'eliminazione della tabella già creata; usa --skip-add-drop-table invece. (Usa anche --no-create-info con --skip-add-drop-table perché non vorrai neanche l'istruzione di creazione della tabella) cioè:

    mysqldump --skip-add-drop-table --no-create-info -h mysqlhostserver -u mysqlusername -p databasename tablename | bzip2 -c > blog.bak.sql.bz2

Per tua informazione: Non puoi esportare più di una tabella usando (tablename, tablename, tablename). O esporti tutte le tabelle non usando nessun nome di tabella dopo il nome del database OPPURE usa solo un nome di tabella.


Modifica

Nota che se la tua tabella è grande allora è saggio esportarla in parti. Cioè, crea file di dump di 80k (ottantamila) record (circa uguale a 10 Mb) usando il seguente comando; Per tua informazione: Ho diviso l'esportazione usando where con mysqldump.

mysqldump -h mysqlhostserver -u mysqlusername -p --add-drop-table --add-drop-trigger --skip-triggers --dump-date --single-transaction --where='1 limit 0,80000' databasename tablename > /home/blog1.bak.sql
mysqldump mysqlhostserver -u mysqlusername -p --skip-add-drop-table --no-create-info --dump-date --single-transaction --where='1 limit 80000,999999' databasename tablename > /home/blog2.bak.sql

Il comando sopra prima crea il primo file di 80K record blog1.bak.sql file (nota che ho saltato i trigger in questo dump. L'ho scoperto dopo perché mi aveva fatto impazzire che se il primo dump aveva dei trigger associati su insert o update. quando importavi questo primo file di dump,

  1. avrebbe creato la tabella
  2. inserito i record nella nuova tabella creata.
  3. creato i trigger associati a questa tabella e li avrebbe applicati

Quindi quando importeresti l'altro file di dump dopo il primo; applicherebbe i trigger (nessun modo di disabilitare i trigger per ora; eccetto riscrivere quei trigger e aggiungere codice complicato per disabilitare i trigger per debug O nel nostro caso per l'importazione). Solitamente i trigger hanno codice con join ad altre tabelle; che potrebbero non essere state importate prima di questa importazione e quindi causare fallimento dell'importazione.

15 feb 2021 10:30:22