如何在一行中转储 mysql 数据库并传输到远程 ftp(用于 crontab)?

如何在一行中转储 mysql 数据库并传输到远程 ftp(用于 crontab)?

我需要每周备份一次 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

相关内容