我需要每周备份一次 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 协议传输到另一台服务器。
我搜索了一下,找到了一些关于“使用 curlftpfs 在 /mnt/ftpserver/ 下永久挂载远程 ftp 服务器”的信息,但在我的 Linux 中没有找到执行此操作的步骤
非常感谢你能给我的任何建议
答案1
如果您的某些任务需要多行 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 所做的那样,多次调用命令替换可能会导致不同的结果。如果日期包括小时/分钟/秒,则更有可能出现这种情况,但是,请考虑一下如果您的 cron 作业在午夜前启动会发生什么情况 - 您的第一次日期调用给出,例如bdd-19-05-11.sql
,如果 mysqldump 花费的时间足够长,以至于午夜过去并且您进入第二天,您的第二个命令将需要一个文件名bdd-20-05-11.sql
。出于这个原因,我调用date
一次并将其存储在变量中。
答案2
如果您愿意在 crontab 中输入 ftp 密码,则可以使用 ncftpput。或者输入 ncftpput cfg 文件的路径
0 18 * * 1 /usr/bin/mysqldump --add-drop-table --extended-insert -user -ppass db [table] > /home/myuser/backups/bdd-`date +%d-%m-%Y`.sql && ncftpput -u user -p pass host.remote.com /home/myuser/backups/bdd-`date +%d-%m-%Y`.sql remotePath//bdd-`date +%d-%m-%Y`.sql