mysqldump -u...-p... mydb t1 t2 t3 > mydb_tables.sql
Если у вас есть тонна таблиц в mydb и вы хотите сбросить все, кроме t1, t2 и t3, сделайте это:
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
Попробуйте!
ОБНОВЛЕНИЕ 2014-03-06 10:15 EST
@RoryDonohue указал мне, что функция GROUP_CONCAT должна иметь максимальную длину. Я добавил переменную сеанса group_concat_max_len в свой ответ длиной не более 10К. Спасибо, @RoryDonohue.
Чтобы исключить только несколько таблиц, вы можете использовать --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 и т. Д.
codewaggle
@codecowboy, вы можете изменить SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"на SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". Я только что проверил, и это работает. Вы можете изменить условие на «% foo%», чтобы получить все таблицы, содержащие «foo» в любом месте их имен (включая «food», «fool» и т. Д.).
Баттл Буткус
1
Разве подход к исключению таблиц здесь не является избыточным и избыточным, учитывая наличие --ignore-tableаргумента? И если так, не лучше ли вычеркнуть ваш сценарий из ответа и просто порекомендовать его --ignore-table?
Марк Эмери
@codewaggle Это выдает ошибку, Illegal use of option --ignore-table=<database>.<table>если я не укажу таблицу как schemaname.tablename.
WAF
классная штука, какая-то причина, почему переменная SQL не многострочная?
Когда у вас есть несколько таблиц, гораздо лучше запустить что-то вроде этого:
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]
Или что-то вроде этого:
mysqldump -u [user]-p[password] databasename `echo "show tables like 'table_name_%';"| mysql -u[user]-p[password] databasename
| sed '/Tables_in/d'`>[target_file]
Помните, что эти команды должны вводиться только в одну строку.
Ответы:
Если вы сбрасываете таблицы t1, t2 и t3 из mydb
Если у вас есть тонна таблиц в mydb и вы хотите сбросить все, кроме t1, t2 и t3, сделайте это:
Попробуйте!
ОБНОВЛЕНИЕ 2014-03-06 10:15 EST
@RoryDonohue указал мне, что функция GROUP_CONCAT должна иметь максимальную длину. Я добавил переменную сеанса group_concat_max_len в свой ответ длиной не более 10К. Спасибо, @RoryDonohue.
источник
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
наSQL="${SQL} AND table_name NOT LIKE 'foo\_%'"
. Я только что проверил, и это работает. Вы можете изменить условие на «% foo%», чтобы получить все таблицы, содержащие «foo» в любом месте их имен (включая «food», «fool» и т. Д.).--ignore-table
аргумента? И если так, не лучше ли вычеркнуть ваш сценарий из ответа и просто порекомендовать его--ignore-table
?Illegal use of option --ignore-table=<database>.<table>
если я не укажу таблицу какschemaname.tablename
.Примечание, чтобы расширить ответ от RolandoMySQLDBA .
Сценарий, который он включил, отлично подходит для включения (
and table_name in
) или исключения (and table_name NOT in
) списка таблиц.Если вам просто нужно исключить одну или две таблицы, вы можете исключить их по отдельности с помощью
--ignore-table
опции:источник
Когда у вас есть несколько таблиц, гораздо лучше запустить что-то вроде этого:
Или что-то вроде этого:
Помните, что эти команды должны вводиться только в одну строку.
источник
Вы можете сделать это просто используя следующую команду:
источник