Wie kann ich eine bestimmte Tabelle oder einen Satz von Tabellen sichern, ohne den Rest der DB-Tabellen einzuschließen?
Wenn Sie die Tabellen t1, t2 und t3 aus mydb sichern
mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql
Wenn Sie eine Menge Tabellen in mydb haben und alles außer t1, t2 und t3 sichern möchten, gehen Sie folgendermaßen vor:
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
Versuche es !!!
@ RoryDonohue hat mich darauf hingewiesen, dass die maximale Länge der Funktion GROUP_CONCAT erweitert werden muss. Ich habe die Sitzungsvariable group_concat_max_len zu meiner Antwort mit einer maximalen Länge von 10 KB hinzugefügt. Danke, @RoryDonohue.
Ein Hinweis zum Erweitern die Antwort von RolandoMySQLDBA .
Das Skript, das er aufgenommen hat, ist ein großartiger Ansatz, um eine Liste von Tabellen einzuschließen (and table_name in
) Oder auszuschließen (and table_name NOT in
).
Wenn Sie nur eine oder zwei Tabellen ausschließen müssen, können Sie sie mit der Option --ignore-table
Einzeln ausschließen:
mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql
Wenn Sie mehr als ein paar Tabellen haben, ist es viel besser, so etwas auszuführen:
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]
Oder so etwas:
mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';"
| mysql -u[user] -p[password] databasename
| sed '/Tables_in/d'` > [target_file]
Denken Sie daran, dass diese Befehle nur in einer Zeile eingegeben werden dürfen.
Sie können dies einfach mit dem folgenden Befehl tun:
mysqldump -uusername -ppassword dbname \
--ignore-table=schema.tablename1 \
--ignore-table=schema.tablename2 \
--ignore-table=schema.tablename3 > mysqldump.sql