Linux

如何在一行中轉儲 mysql 數據庫並傳輸到遠端 ftp -for crontab-?

  • May 19, 2011

我需要每周備份一個 mySQL 表,然後使用 ftp 將其傳輸到遠端機器。

這是我現在在 crontab 中的命令:

0 18 * * 1 /usr/bin/mysqldump --add-drop-table --extended-insert -user -ppass db [table] > /home/myuser/backups/bdd-`date +%d-%m-%Y`.sql

我需要替換命令的最後一部分,以便生成的 sql 文件可以使用 ftp 協議傳輸到另一台伺服器。

我已經搜尋並找到了一些關於“使用 /mnt/ftpserver/ 下的 curlftpfs 永久安裝遠端 ftp 伺服器”的內容,但在我的 linux 中沒有找到執行此操作的步驟

非常感謝您能給我的任何提示

如果你有一些需要多行 shell 的任務,一種常見的方法是把它放在一個小的 shell 腳本中,然後從 cron 呼叫那個 shell 腳本。

0 18 * * 1 /home/myuser/backups/backup-and-ftp-db.sh

其中/home/myuser/backups/backup-and-ftp-db.sh包含類似的東西

#!/bin/sh
dumpfile=/home/myuser/backups/bdd-$(date +%d-%m-%Y).sql
/usr/bin/mysqldump --add-drop-table --extended-insert -user -ppass db [table] > $dumpfile
lftp -e "put $dumpfile backupdir/$dumpfile ; quit" -u username,password backupserver

還值得注意的是,date像 Mike 所做的那樣多次呼叫 in 命令替換會導致不同的結果。如果日期包括小時/分鐘/秒,則更有可能發生這種情況,但是,請考慮如果您的 cron 作業在午夜之前開始會發生什麼 - 您的第一次日期呼叫給出了,例如bdd-19-05-11.sql,如果 mysqldump 花費的時間足夠長以至於午夜過去並且您進入下一個一天,您的第二個命令將需要一個文件名bdd-20-05-11.sql。出於這個原因,我呼叫date一次並將其儲存在一個變數中。

引用自:https://serverfault.com/questions/270941