mysqldump整个结构,但只包含单个命令中选定表的数据

Tre*_*vor 32 mysql mysqldump

我的数据库有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
Run Code Online (Sandbox Code Playgroud)

以它们被转储的相同顺序导入它们(结构,然后是table1和table2中的数据)

有没有办法将它组合成一个mysqldump命令?

Cfr*_*eak 40

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

mysqldump -u user -p --no-data db > structure.sql; mysqldump -u user -p db table1 table2 >> structure.sql
Run Code Online (Sandbox Code Playgroud)

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


0xC*_*22L 6

鉴于您可能希望将输出通过管道输出到另一个命令,而不是仅仅重定向到文件并在下一个命令中附加到该文件,您可以尝试(从stask示例中修改):

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

......在我的情况下:

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

将两个mysqldump命令括在括号中会创建一个子shell,其输出我们将其导入gzip,然后将其重定向到一个文件中.

PS:我也无法将它组合成一个单独的mysqldump调用.