1

我正在尝试创建 mysql 数据库的自动备份,从我的虚拟主机到我的 NAS 存储。

我才刚刚开始学习 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-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz: 没有这样的文件或目录

有谁知道如何克服这个问题并将其实际保存到指定的存储中?

4

4 回答 4

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 上工作过 :)

于 2012-10-12T08:49:01.860 回答
1

检查远程服务器上是否存在目录/path-to-the-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
于 2012-10-12T08:43:32.040 回答
1

您应该进一步调试。第一次尝试

cat > /path-to-the-directory-on-nas/test.sql.gz. 

之后,您应该尝试日期是否有效:

echo $(date +%Y-%m-%d_%H.%I.%S)

然后你就会知道路径是否存在或者 date... 是否失败。从您的错误消息看来,日期似乎是问题所在,但您需要先确定。然后你可以尝试将日期分配给一个变量:

#!/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"
于 2012-10-12T09:38:23.920 回答
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"
于 2012-10-12T08:06:13.377 回答