Wenn Sie die Tabellen t1, t2 und t3 von 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 !!!
UPDATE 06.03.2014 10:15 EST
@RoryDonohue hat mich darauf hingewiesen, dass die maximale Länge der GROUP_CONCAT- Funktion verlängert werden muss. Ich habe meiner Antwort die Sitzungsvariable group_concat_max_len mit einer maximalen Länge von 10 KB hinzugefügt . Danke, @RoryDonohue.
Um auszuschließen , nur ein paar Tabellen können Sie verwenden --ignore-table = Tabelle 1 --ignore-table = Table2 --ignore-table = usw. Table3
codewaggle
@codecowboy, können Sie ändern SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"zu SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". Ich habe es gerade getestet und es funktioniert. Sie können die Bedingung in "% foo%" ändern, um alle Tabellen mit "foo" an einer beliebigen Stelle im Namen abzurufen (einschließlich "food", "fool" usw.).
Buttle Butkus
1
Ist der Ansatz zum Ausschließen von Tabellen hier angesichts des vorliegenden --ignore-tableArguments nicht redundant und übertrieben ? Und wenn ja, wäre es nicht besser, Ihr Skript aus der Antwort zu streichen und --ignore-tablestattdessen nur zu empfehlen ?
Mark Amery
@codewaggle Das gibt den Fehler, es Illegal use of option --ignore-table=<database>.<table>sei denn, ich gebe die Tabelle als schemaname.tablename.
WAF
coole Sachen, aus irgendeinem Grund SQL-Variable ist nicht mehrzeilig?
Das Skript, das er einfügte, ist ein großartiger Ansatz, um eine Liste von Tabellen and table_name ineinzuschließen ( and table_name NOT in) oder auszuschließen ( ).
Wenn Sie nur eine oder zwei Tabellen ausschließen müssen, können Sie diese mit der folgenden --ignore-tableOption einzeln ausschließen :
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 ähnlich:
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.
Antworten:
Wenn Sie die Tabellen t1, t2 und t3 von mydb sichern
Wenn Sie eine Menge Tabellen in mydb haben und alles außer t1, t2 und t3 sichern möchten, gehen Sie folgendermaßen vor:
Versuche es !!!
UPDATE 06.03.2014 10:15 EST
@RoryDonohue hat mich darauf hingewiesen, dass die maximale Länge der GROUP_CONCAT- Funktion verlängert werden muss. Ich habe meiner Antwort die Sitzungsvariable group_concat_max_len mit einer maximalen Länge von 10 KB hinzugefügt . Danke, @RoryDonohue.
quelle
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
zuSQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
. Ich habe es gerade getestet und es funktioniert. Sie können die Bedingung in "% foo%" ändern, um alle Tabellen mit "foo" an einer beliebigen Stelle im Namen abzurufen (einschließlich "food", "fool" usw.).--ignore-table
Arguments nicht redundant und übertrieben ? Und wenn ja, wäre es nicht besser, Ihr Skript aus der Antwort zu streichen und--ignore-table
stattdessen nur zu empfehlen ?Illegal use of option --ignore-table=<database>.<table>
sei denn, ich gebe die Tabelle alsschemaname.tablename
.Ein Hinweis zur Antwort von RolandoMySQLDBA .
Das Skript, das er einfügte, ist ein großartiger Ansatz, um eine Liste von Tabellen
and table_name in
einzuschließen (and table_name NOT in
) oder auszuschließen ( ).Wenn Sie nur eine oder zwei Tabellen ausschließen müssen, können Sie diese mit der folgenden
--ignore-table
Option einzeln ausschließen :quelle
Wenn Sie mehr als ein paar Tabellen haben, ist es viel besser, so etwas auszuführen:
Oder so ähnlich:
Denken Sie daran, dass diese Befehle nur in einer Zeile eingegeben werden dürfen.
quelle
Sie können es einfach mit dem folgenden Befehl tun:
quelle