mysqldump -u...-p... mydb t1 t2 t3 > mydb_tables.sql
Jeśli masz mnóstwo tabel w mydb i chcesz zrzucić wszystko oprócz t1, t2 i t3, wykonaj następujące czynności:
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
Spróbuj !!!
AKTUALIZACJA 2014-03-06 10:15 EST
@RoryDonohue zwrócił mi uwagę, że funkcja GROUP_CONCAT musi zostać przedłużona. Do mojej odpowiedzi dodałem zmienną sesji group_concat_max_len o długości maks. 10 KB. Dzięki, @RoryDonohue.
Aby wykluczyć tylko kilka tabel, możesz użyć opcji --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 itp.
kodowanie
@codecowboy, możesz zmienić SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"na SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". Właśnie to przetestowałem i działa. Możesz zmienić warunek na „% foo%”, aby uzyskać wszystkie tabele zawierające „foo” w dowolnym miejscu w ich nazwach (w tym „jedzenie”, „głupiec” itp.).
Buttle Butkus,
1
Czy podejście wykluczania tabel tutaj jest zbędne i nadmierne, biorąc pod uwagę istnienie --ignore-tableargumentu? A jeśli tak, to czy nie lepiej byłoby zeskrobać skrypt z odpowiedzi i po prostu polecić --ignore-tablezamiast tego?
Mark Amery
@codewaggle To daje błąd, Illegal use of option --ignore-table=<database>.<table>chyba że podam tabelę jako schemaname.tablename.
WAF,
fajne rzeczy, czy jakikolwiek powód zmienna SQL nie jest wielowierszowa?
Jeśli masz więcej niż kilka stolików, o wiele lepiej jest uruchomić coś takiego:
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]
Lub coś takiego:
mysqldump -u [user]-p[password] databasename `echo "show tables like 'table_name_%';"| mysql -u[user]-p[password] databasename
| sed '/Tables_in/d'`>[target_file]
Pamiętaj, że te polecenia muszą być wpisywane tylko w jednym wierszu.
Odpowiedzi:
Jeśli wysyłasz tabele t1, t2 i t3 z mydb
Jeśli masz mnóstwo tabel w mydb i chcesz zrzucić wszystko oprócz t1, t2 i t3, wykonaj następujące czynności:
Spróbuj !!!
AKTUALIZACJA 2014-03-06 10:15 EST
@RoryDonohue zwrócił mi uwagę, że funkcja GROUP_CONCAT musi zostać przedłużona. Do mojej odpowiedzi dodałem zmienną sesji group_concat_max_len o długości maks. 10 KB. Dzięki, @RoryDonohue.
źródło
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
naSQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
. Właśnie to przetestowałem i działa. Możesz zmienić warunek na „% foo%”, aby uzyskać wszystkie tabele zawierające „foo” w dowolnym miejscu w ich nazwach (w tym „jedzenie”, „głupiec” itp.).--ignore-table
argumentu? A jeśli tak, to czy nie lepiej byłoby zeskrobać skrypt z odpowiedzi i po prostu polecić--ignore-table
zamiast tego?Illegal use of option --ignore-table=<database>.<table>
chyba że podam tabelę jakoschemaname.tablename
.Uwaga do rozwinięcia odpowiedzi RolandoMySQLDBA .
Dołączony przez niego skrypt to świetne podejście do dołączania (
and table_name in
) lub wykluczania (and table_name NOT in
) listy tabel.Jeśli chcesz tylko wykluczyć jedną lub dwie tabele, możesz je wykluczyć indywidualnie za pomocą
--ignore-table
opcji:źródło
Jeśli masz więcej niż kilka stolików, o wiele lepiej jest uruchomić coś takiego:
Lub coś takiego:
Pamiętaj, że te polecenia muszą być wpisywane tylko w jednym wierszu.
źródło
Możesz to zrobić po prostu używając poniższego polecenia:
źródło