35

我的数据库有 3 个表:table1、table2 和 table3

我想在这个数据库上做一个mysqldump,条件如下:

  • 所有表的转储结构
  • 只转储table1和table2的数据,忽略table3中的数据

目前,我使用 2 个 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 命令?

4

5 回答 5

44

您不能将它们组合在一个命令中,但您可以同时执行这两个命令并输出到同一个文件。

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

为了避免必须输入两次密码,您可以这样做-ppassword(注意空间不足!)。也可以--no-data在第一个命令中使用,否则您最终也会得到数据。-d 当你只做一个数据库时不需要。

于 2009-11-19T16:10:01.980 回答
7

鉴于您可能希望像我一样将输出通过管道传输到另一个命令,而不是仅仅重定向到一个文件并在下一个命令中附加到该文件,您可以尝试(从 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 命令括在括号中会创建一个子 shell,我们将其输出通过管道传输到 gzip 中,然后将其重定向到一个文件中。

PS:不过,我也无法将它组合成一个 mysqldump 调用。

于 2011-04-03T15:30:31.603 回答
1

我不认为你可以在一个命令中做到这一点。但是您绝对可以将输出合并到一个文件中。为什么不将它包装在一些执行以下操作的 shell 脚本中:

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

您将使用两个参数运行此脚本:用户名和密码。

于 2009-11-19T16:11:54.820 回答
0

您可以删除该INSERT INTO ...部分:

mysqldump \
  --opt \
  -u ${DB_USER} -p${DB_PASS} \
  ${DB_NAME} \
  | grep -v 'INSERT INTO `table3`' \
  | grep -v 'INSERT INTO `table4`'
于 2016-11-04T13:33:16.943 回答
0

这实际上非常简单,在不需要数据的表上使用 --where 子句,并给它一个始终为假的条件。例如,在 foo 和 gah 上加载数据,在 bar 上仅加载模式:

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

所以是的,你可以在一行上做到这一点。

于 2016-02-25T01:00:43.203 回答