我正在尝试从我的虚拟主机到我的NAS存储创建mysql数据库的自动备份。
我只是刚刚开始学习shell命令所以请耐心等待 - 到目前为止我发现的是:
mysqldump
-uusername
-ppassword
--opt database_name |
gzip -c |
ssh user@ipaddress
"cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz"
但这似乎返回以下错误:
-bash:/ path-to-directory-on-nas / $(日期+%Y-%m-%d_%H.%I。%S).sql.gz:没有这样的文件或目录
有谁知道如何克服这个问题并将其实际保存到指定的存储空间?
答案 0 :(得分:2)
更改
cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz
到
cat > /path-to-the-directory-on-nas/`date +%Y-%m-%d_%H.%I.%S`.sql.gz
确保该文件夹已存在。至少在我的Ubuntu上工作:)
答案 1 :(得分:1)
检查远程服务器上是否存在 / path-to-directory-on-nas / 目录。
如果缺少,可以使用以下命令在ssh上创建它:
ssh user@ipaddress mkdir -p /path-to-the-directory-on-nas/
(如果有多个需要创建的目录树,则使用-p)
如果要创建带有时间戳的目录,则应执行以下操作:
ssh user@ipaddress mkdir -p /path-to-the-directory-on-nas/$(date '+%Y%M%D')/'
如果选择在目录路径中包含时间戳,则需要将其包含在mysqldump命令使用的路径中。
示例:强>
成功将文件创建到远程系统上存在的远程目录 / var / tmp
$ date | ssh user@ipaddress 'cat > /var/tmp/file.txt'
$ ssh user@ipaddress cat /var/tmp/file.txt
Fri Oct 12 19:39:16 EST 2012
如果没有遇到同样的错误,请尝试写入不存在的目录。
$ date | ssh user@ipaddress 'cat > /var/Xtmp/file.txt'
bash: /var/Xtmp/file.txt: No such file or directory
答案 2 :(得分:1)
你应该进一步调试。首先尝试
cat > /path-to-the-directory-on-nas/test.sql.gz.
之后,您应该尝试日期是否有效:
echo $(date +%Y-%m-%d_%H.%I.%S)
然后你会知道路径是否存在或者日期是否失败。从您的错误信息看起来似乎日期是问题,但您需要先确定。然后你可以尝试将日期分配给变量:
#!/bin/bash
filename=$(date +%Y-%m-%d_%H.%I.%S);
mysqldump
-uusername
-ppassword
--opt database_name |
gzip -c |
ssh user@ipaddress
"cat > /path-to-the-directory-on-nas/$filename.sql.gz"
答案 3 :(得分:0)
替换
ssh user@ipaddress
"cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz"
与
ssh user@ipaddress
"cat > /path-to-the-directory-on-nas/"$(date +%Y-%m-%d_%H.%I.%S)".sql.gz"