从oscent到远程服务器的ssh mysqldump

从oscent到远程服务器的ssh mysqldump,mysql,linux,ssh,mysqldump,remote-server,Mysql,Linux,Ssh,Mysqldump,Remote Server,我正在尝试创建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" 但

我正在尝试创建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:/nas/$date+%Y-%m-%d\u%H.%I.%S.sql.gz上目录的路径:没有这样的文件或目录

是否有人知道如何克服此问题并将其实际保存到指定的存储器中?

更换

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"

检查远程服务器上是否存在指向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/Xtmp/file.txt'
 bash: /var/Xtmp/file.txt: No such file or directory
检查远程服务器上是否存在指向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/Xtmp/file.txt'
 bash: /var/Xtmp/file.txt: No such file or directory
改变

cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz

确保该文件夹已存在。至少在我的Ubuntu上工作过:

更改

cat > /path-to-the-directory-on-nas/$(date +%Y-%m-%d_%H.%I.%S).sql.gz


确保该文件夹已存在。至少在我的Ubuntu上工作过:

你应该进一步调试。初试

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"

您应该进一步调试。初试

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"


谢谢YaK-不幸的是,它似乎没有任何区别。谢谢YaK-不幸的是,它似乎没有任何区别。你使用什么存储引擎?mysqlhotcopy对于MyISAMNot来说要快得多——我怎么才能找到这些信息呢;请参阅引擎专栏您使用的存储引擎是什么?mysqlhotcopy对于MyISAMNot来说要快得多——我怎么才能找到这些信息呢;请参阅引擎专栏谢谢dannyla-您能解释一下我如何在远程服务器上用当前日期和时间包装目录吗?使用与创建转储文件相同的过程,但是您可能需要删除一些时间分辨率,例如秒。sshuser@ipaddressmkdir-p/指向nas上目录的路径-$date'+%Y-%m-%d_%H'/谢谢dannyla-请您也解释一下如何在远程服务器上用当前日期和时间包装目录?使用与创建转储文件相同的过程,但是您可能需要删除一些时间分辨率,例如秒。sshuser@ipaddressmkdir-p/指向nas上目录的路径-$date'+%Y-%m-%d_%H'/谢谢raynix-我会再试一次。恐怕它也不起作用。我已经用pwd检查了目录,并将其复制到命令中,以确保它是正确的路径等。但仍然-不走运-没有得到它可能是什么的线索。还要确保您可以输入该目录并在那里写入文件。虚拟主机是CentOs 6.2,我不是100%安装在我的Qnap NAS上的,但我相信它有点Linux的味道。谢谢raynix-我会再试一次。恐怕它也不起作用。我已经用pwd检查了目录,并将其复制到命令中,以确保它是正确的路径等。但仍然-运气不好-没有得到它可能是什么的线索。还要确保您可以输入该目录并在那里写入文件。虚拟主机是CentOs 6.2,我不是100%安装在我的Qnap NAS上,但我相信这是某种Linux风格。