从oscent到远程服务器的ssh mysqldump

时间:2012-10-12 07:50:42

标签: mysql linux ssh mysqldump remote-server

我正在尝试从我的虚拟主机到我的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:没有这样的文件或目录

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

4 个答案:

答案 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"