sh脚本中的mysqldump无法正常工作

时间:2016-11-22 11:49:46

标签: mysql ubuntu sh

我有一个sh脚本来备份数据库服务器。

#!/bin/bash
mysqldump -u <username> -p<password> --all-databases --single-transaction --opt > /home/backup/h_157_2-1.sql
rsync -zrp --partial /home/backup/h_157_2-1.sql root@<server-ip>:/home/backup/H_157_2/

当我在命令行中自己执行这两个命令时,它们按预期工作,我得到一个包含内容的.sql文件。但是当我执行脚本时,文件只包含这个:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help

我已经尝试更改选项的顺序或省略--opt,但结果仍然相同。那么什么可能导致命令在脚本中不起作用?

1 个答案:

答案 0 :(得分:0)

我找不到解决初始问题的方法。即使在Elzo Valugi的帮助下聊天,结果仍然是相同的:在命令行上,mysqldump工作得很好。在剧本中,我总是得到同样的消息。 (见初始问题)。

要解决这个问题,我构建了一个解决方法来自行转储每个数据库。

#!/bin/sh
for dir in /var/lib/mysql/*/; 
do 
  dir=${dir%*/}
  mysqldump -u <user> -p<password> ${dir##*/} --single-transaction --opt > /home/backup/h_157_2_${dir##*/}.sql
  rsync -zrp --partial /home/backup/h_157_2_${dir##*/}.sql root@<server-ip>:/home/backup/H_157_2/
done;

通过这个循环遍历mysql存储目录中的所有directorys,将它们剪切为dir-name并将其用于mysqldump。这会将每个数据库放在自己的文件中。我认为可以解决这个问题,将它们全部合并为一个,但根据我的需要,我可以使用不同的文件。