Как вы используете таблицы (ы) mysqldump?

Как я могу сбросить определенную таблицу или набор таблиц, не включая остальные таблицы db?

343 голоса | спросил markdorison 17 SatEurope/Moscow2011-12-17T00:39:37+04:00Europe/Moscow12bEurope/MoscowSat, 17 Dec 2011 00:39:37 +0400 2011, 00:39:37

4 ответа


456

Если вы сбрасываете таблицы t1, t2 и t3 из mydb

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 в мой ответ с максимальной длиной 10K. Спасибо, @RoryDonohue.

ответил RolandoMySQLDBA 17 SatEurope/Moscow2011-12-17T00:46:36+04:00Europe/Moscow12bEurope/MoscowSat, 17 Dec 2011 00:46:36 +0400 2011, 00:46:36
67

Заметка для расширения на ответе RolandoMySQLDBA .

Сценарий, который он включил, является отличным подходом для включения (and table_name in) или исключения (and table_name NOT in) списка таблиц.

Если вам просто нужно исключить одну или две таблицы, вы можете исключить их отдельно с помощью опции --ignore-table:

mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql
ответил codewaggle 15 SatEurope/Moscow2012-12-15T06:06:19+04:00Europe/Moscow12bEurope/MoscowSat, 15 Dec 2012 06:06:19 +0400 2012, 06:06:19
25

Когда у вас больше нескольких таблиц, гораздо лучше работает что-то вроде этого:

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]

Помните, что эти команды должны вводиться только в одной строке.

ответил grosshat 18 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 18 Sep 2012 11:35:01 +0400 2012, 11:35:01
9

Вы можете сделать это, просто используя команду ниже:

 mysqldump -uusername -ppassword dbname \
  --ignore-table=schema.tablename1    \
  --ignore-table=schema.tablename2    \
  --ignore-table=schema.tablename3 > mysqldump.sql
ответил Vaibhav 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 13 Sep 2013 09:57:42 +0400 2013, 09:57:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132