0

为初学者和测试命令执行自动数据库备份。我发现通过 BASH CLI 对文本文件的每一行执行操作的效果如下:

# while read line; do
      COMMAND $line
  done

我创建了一个数据库名称文件列表:

# mysql -uroot -e "show databases" > databases

然后对文件尝试以下操作,看看它是否可以正常工作。

# while read line; do 
  "mysqldump -uroot $line > /dbbackups/$line.sql"
  done

看起来,这将正常工作,但遇到以下错误:

[04:58:46] [root@theia database-backup-testing]# cat databases | while read line ; do "mysqldump -uroot $line > $line.sql" ; done
-bash: mysqldump -uroot Database > Database.sql: command not found
-bash: mysqldump -uroot information_schema > information_schema.sql: command not found
-bash: mysqldump -uroot cphulkd > cphulkd.sql: command not found

我不确定为什么它给出命令未找到,显然,命令的输出似乎是正确的。我也尝试过使用 mysqldump (/usr/bin/mysqldump) 的绝对路径,但它给出了相同的错误。

谁能告诉我为什么会这样?


编辑:我找到了一个修复:

如果引号被删除,该脚本将起作用:

# cat databases | 
  while read line; do 
      mysqldump -uroot $line > $line.sql
  done

显然,引号导致它作为字符串而不是命令执行。

4

2 回答 2

0

这是解决此问题的 bash 脚本: https ://github.com/jeevandongre/backup-restore

于 2013-03-28T10:16:43.257 回答
0

为什么它给出命令未找到

您的报价不正确,请尝试以下操作:

while read line ; do mysqldump -uroot "$line" > "$line".sql ; done

没用过mysqldump,所以我无法帮助特定命令的语法。

于 2013-03-28T10:19:06.270 回答