2012-10-12 115 views
1

我试图从我的虚拟主机创建自动备份的mysql数据库到我的NAS存储。ssh mysqldump从oscent到远程服务器

我才刚刚开始学习shell命令,所以请多多包涵 - 我到目前为止已经发现的是:

mysqldump 
    -uusername 
    -ppassword 
    --opt database_name | 
    gzip -c | 
    ssh [email protected] 
    "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: No such file or directory

有谁知道如何解决这个问题,并将其保存到指定的存储?

+0

您使用什么存储引擎? mysqlhotcopy比MyISAM快得多 – SlyChan

+0

不太确定 - 我如何找到这些信息? –

+0

'SHOW TABLE STATUS FROM your_db;'看'Engine'列 – SlyChan

回答

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

+0

该文件夹肯定存在 –

+0

然后我的回答应该也为你工作。 – raynix

+0

谢谢raynix - 我会再试一次。 –

0

更换

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

ssh [email protected] 
    "cat > /path-to-the-directory-on-nas/"$(date +%Y-%m-%d_%H.%I.%S)".sql.gz" 
+0

谢谢YaK - 不幸的是它似乎没有任何区别。 –

1

检查目录/路径到该目录上的NAS/存在的远程服务器上。

如果缺少您可以通过使用以下命令SSH创建:

ssh [email protected] mkdir -p /path-to-the-directory-on-nas/ 

(使用-p如果有多个目录树需要创建)

如果你想创建一个带有时间戳的目录,你应该做到以下几点:如果您选择在目录路径时间戳

ssh [email protected] mkdir -p /path-to-the-directory-on-nas/$(date '+%Y%M%D')/' 

,你需要包括它在p记住你的mysqldump命令使用。

例子:

成功创建该文件到远程系统/var/tmp中

$ date | ssh [email protected] 'cat > /var/tmp/file.txt' 
$ ssh [email protected] cat /var/tmp/file.txt 
Fri Oct 12 19:39:16 EST 2012 

与你所得到的同样的错误,无法上存在一个远程目录,试图写入一个dosn't存在的目录。

$ date | ssh [email protected] 'cat > /var/Xtmp/file.txt' 
bash: /var/Xtmp/file.txt: No such file or directory 
+0

谢谢丹尼拉 - 你能解释一下,我怎样才能在当前的日期和时间在远程服务器上创建目录? –

+0

使用与创建转储文件相同的过程,但是您可能需要删除一些时间分辨率(例如秒)。 ssh user @ ipaddress mkdir -p/path-to-directory-on-nas-$(date'+%Y-%m-%d_%H')/ – dannyla

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 [email protected] 
    "cat > /path-to-the-directory-on-nas/$filename.sql.gz" 
+0

谢谢你 - 我会试试。 –

+0

@SpencerMark你能解决它吗? – Nin

相关问题