我想使用 来获取backup
我的mysql
数据。我有三个文件,逐行 mysqldump
包含 mysql 的名称。我的脚本有这一行 -tables
mysqldump -h localhost -uroot --lock-tables=false db < $2 > ~/backup/$name'.sql'
我用getopts
它来处理一些options
。基本上$2
就是我要提供的文件。这个文件有 - table1 和 table2。所以这个命令应该只备份这两个表。
但是当我cat
打开文件时~/backup/name.sql
,它显示了所有的备份db
。我不确定它是所有 3 个文件的所有表的组合备份还是整个数据库的备份。但它正在备份整个数据库而不是两个表。
我究竟做错了什么?
当我这样说的时候,它工作得很好-
mysqldump -h localhost -uroot --lock-tables=false db table1 table2 > ~/backup/$name'.sql'
答案1
失败的原因是 mysqldump 没有读取标准输入;table1 和 table2 是(可选)参数,但您不是在命令行上提供它们,而是在 stdin 上提供它们。
如果$2
是包含一行文本的文件的文件名table1 table2
,则以下操作应该有效:
mysqldump -h localhost -uroot --lock-tables=false db `cat $2` > ~/backup/$name'.sql'
Bash 将会把这个命令行扩展为
mysqldump -h localhost -uroot --lock-tables=false db table1 table2 > /home/user/backup/somename.sql
这正是您想要运行的。
但是,既然你正在使用 getopt,也许你可以把“table1”$2
和“table2”放进去$3
,然后运行
mysqldump -h localhost -uroot --lock-tables=false db $2 $3 > ~/backup/$name'.sql'
答案2
这有点取决于您如何运行脚本,但您应该能够使用反引号并 cat 文件。
mysqldump -h localhost -uroot --lock-tables=false db `cat $2` > ~/backup/$name'.sql