2012-10-12 147 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

相關問題