Come posso scaricare una tabella specifica o un set di tabelle senza includere il resto delle tabelle db?
Come posso scaricare una tabella specifica o un set di tabelle senza includere il resto delle tabelle db?
Risposte:
Se stai scaricando le tabelle t1, t2 e t3 da mydb
mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql
Se hai un sacco di tabelle in mydb e vuoi scaricare tutto tranne t1, t2 e t3, fai questo:
DBTODUMP=mydb
SQL="SET group_concat_max_len = 10240;"
SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
TBLIST=`mysql -u... -p... -AN -e"${SQL}"`
mysqldump -u... -p... ${DBTODUMP} ${TBLIST} > mydb_tables.sql
Provaci !!!
@RoryDonohue mi ha fatto notare che la funzione GROUP_CONCAT deve avere una lunghezza massima estesa. Ho aggiunto la variabile di sessione group_concat_max_len alla mia risposta con una lunghezza massima di 10 KB . Grazie, @RoryDonohue.
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
a SQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
. L'ho appena testato e funziona. È possibile modificare la condizione in '% foo%' per ottenere tutte le tabelle contenenti 'foo' ovunque nei loro nomi (inclusi 'food', 'sciocco', ecc.).
--ignore-table
dell'argomento? E se è così, non sarebbe meglio eliminare la tua sceneggiatura dalla risposta e raccomandare --ignore-table
invece?
Illegal use of option --ignore-table=<database>.<table>
meno che non specifichi la tabella come schemaname.tablename
.
Una nota per espandere la risposta di RolandoMySQLDBA .
Lo script che ha incluso è un ottimo approccio per includere ( and table_name in
) o escludere ( and table_name NOT in
) un elenco di tabelle.
Se devi solo escludere una o due tabelle, puoi escluderle singolarmente con l' --ignore-table
opzione:
mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql
Quando hai più di alcuni tavoli è molto meglio eseguire qualcosa del genere:
mysql databasename -u [user] -p[password] -e 'show tables like "table_name_%"'
| grep -v Tables_in
| xargs mysqldump [databasename] -u [root] -p [password] > [target_file]
O qualcosa del genere:
mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';"
| mysql -u[user] -p[password] databasename
| sed '/Tables_in/d'` > [target_file]
Ricorda che quei comandi devono essere digitati in una sola riga.
Puoi farlo semplicemente usando il comando seguente:
mysqldump -uusername -ppassword dbname \
--ignore-table=schema.tablename1 \
--ignore-table=schema.tablename2 \
--ignore-table=schema.tablename3 > mysqldump.sql