Подтвердить что ты не робот

Mysqldump всей структуры, но только данные из выбранных таблиц в одной команде

Моя база данных имеет 3 таблицы: table1, table2 и table3

Я хотел бы сделать mysqldump в этой базе данных со следующими условиями:

  • Структура дампа для всех таблиц
  • Только данные дампа для таблицы1 и таблицы2 игнорируют данные в таблице3

В настоящее время я делаю это с помощью двух операторов mysqldump

mysqldump -u user -p -d db > db_structure.sql
mysqldump -u user -p db --ignore-table=db.table3 > table1_and_table2_data.sql

Импортируйте их в том же порядке, в котором они были сброшены (структура, затем данные из таблицы1 и таблицы2)

Есть ли способ объединить это в одну команду mysqldump?

4b9b3361

Ответ 1

Вы не можете объединить их в одну команду, но вы можете одновременно выполнять обе команды и выводить их в один и тот же файл.

mysqldump -u user -p --no-data db > structure.sql; mysqldump -u user -p db table1 table2 >> structure.sql

чтобы не вводить пароль дважды, вы можете сделать -ppassword (обратите внимание на недостаток места!). Также используйте --no-data в первой команде или вы также получите данные. -d не требуется, когда вы делаете только одну базу данных.

Ответ 2

Учитывая, что вы можете перенаправить вывод на другую команду, как я, вместо того, чтобы просто перенаправлять файл и добавлять к этому файлу в следующей команде, вы можете попробовать (измененный из примера stask):

(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |\
your_command

... в моем случае:

(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |\
gzip -9 > filename.sql.gz

Включение двух команд mysqldump в круглых скобках создает подоболочку, выход которой мы передаем в gzip, а затем перенаправляем ее в файл.

PS: Я также не смог объединить его в один вызов mysqldump.

Ответ 3

Я не думаю, что вы можете сделать это в одной команде. Но вы определенно можете объединить вывод в один файл. Почему бы не обернуть его в оболочку script, которая выполняет следующие действия:

mysqldump -u $1 -p$2 -d db > dump.sql && mysqldump -u $1 -p$2 db --ignore-table=db.table3 >> dump.sql

Вы запустите этот script с двумя параметрами: имя пользователя и пароль.

Ответ 4

Это на самом деле довольно просто, используйте предложения wherewhere в таблицах, где вам не нужны данные и всегда всегда ложные. Например, загрузите данные на foo и gah и только схему на панели:

mysqldump -u ... -p... myDatabase foo bar --where='1=2' gah > myfile.sql

Итак, да, вы можете сделать это на одной строке.

Ответ 5

Вы можете удалить часть INSERT INTO ...:

mysqldump \
  --opt \
  -u ${DB_USER} -p${DB_PASS} \
  ${DB_NAME} \
  | grep -v 'INSERT INTO `table3`' \
  | grep -v 'INSERT INTO `table4`'