我的数据库有3个表:table1,table2和table3
我想在以下条件下对此数据库执行mysqldump:
目前,我使用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
按照转储的顺序(结构,然后是table1和table2中的数据)导入它们
有没有办法将它组合成一个mysqldump命令?
答案 0 :(得分:40)
您不能将它们组合在一个命令中,但可以同时执行这两个命令并输出到同一个文件。
mysqldump -u user -p --no-data db > structure.sql; mysqldump -u user -p db table1 table2 >> structure.sql
为避免必须输入密码两次,您可以执行-ppassword
(请注意缺少空间!)。也可以在第一个命令中使用--no-data
,或者最终得到数据。当你只做一个数据库时不需要-d。
答案 1 :(得分:6)
鉴于您可能希望将输出通过管道输出到另一个命令,而不是仅仅重定向到文件并在下一个命令中附加到该文件,您可以尝试(从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调用。
答案 2 :(得分:0)
我认为你不能在一个命令中做到这一点。但你绝对可以将输出合并到一个文件。为什么不将它包装在以下的一些shell脚本中:
mysqldump -u $1 -p$2 -d db > dump.sql && mysqldump -u $1 -p$2 db --ignore-table=db.table3 >> dump.sql
您将使用两个参数运行此脚本:用户名和密码。
答案 3 :(得分:0)
实际上非常简单,在表格中使用 - where子句,你不需要数据并给它一个永远错误的条件。例如,在foo和gah上加载数据,只在bar上加载模式:
mysqldump -u ... -p... myDatabase foo bar --where='1=2' gah > myfile.sql
所以,你可以在一条线上做到这一点。
答案 4 :(得分:0)
您可以删除INSERT INTO ...
部分:
mysqldump \
--opt \
-u ${DB_USER} -p${DB_PASS} \
${DB_NAME} \
| grep -v 'INSERT INTO `table3`' \
| grep -v 'INSERT INTO `table4`'