我需要帮助为 Rackspace Cloud 站点创建备份脚本。
网站需要每天备份网站及其 mysql 数据库(某些网站有多达 4 个数据库),然后需要将备份通过 ftp 传输到异地。
看来我只能通过 cron 作业来实现这一点。Rackspace 展示了一个示例备份脚本,但只展示了如何将文件推送到云文件存储(见下文)。将创建的文件推送到远程服务器的 FTP 语法是什么?
编辑使它工作完整脚本是:
webroot 是 /mnt/stor1-wc1-dfw1/381384/****.*******.com
#!/bin/sh
webroot="YOUR WEBROOT"
db_host="YOUR DB HOST"
db_user="YOUR DB USERNAME"
db_password="YOUR DB PASSWORD"
db_name="YOUR DB NAME"
#Set the date and name for the backup files
date=`date '+%F-%H-%M'`
backupname="backup.$date.tar.gz"
#Dump the mysql database
mysqldump -h $db_host -u $db_user --password="$db_password" $db_name > $webroot/db_backup.sql
#Backup Site
tar -czpvf $webroot/sitebackup.tar.gz $webroot/web/content/
#Compress DB and Site backup into one file
tar --exclude 'sitebackup' --remove-files -czpvf $webroot/$backupname $webroot/sitebackup.tar.gz $webroot/db_backup.sql
#Upload your files via FTP
ftp -n $ftphost <<END
user $user $password
bin
lcd $webroot
put $backupname
quit
END
#After your backup has been uploaded, remove the tar ball from the filesystem.
rm $webroot/$backupname
答案1
你可以使用lftp
lftp -u user,password -e "cd /backup/path; lcd /remote/local/packup/path; put backupfile; quit" remotehost.tld
尽管使用 lftp 和 sftp 可能更安全
lftp -u user,anything sftp://remotehost.tld -e "cd /backup/path; lcd /remote/local/packup/path; put backupfile; quit"
这将使用无密码密钥通过 sftp 进行身份验证和传输文件。无论哪种方式,您都希望确保用于备份的用户拥有尽可能少的权限来执行所需的工作。使用合适的现代 sshd,您可以通过添加以下代码来锁定使用 sftp 的远程服务器上的用户
Match User user
ChrootDirectory /somedir
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
到 /etc/ssh/sshd_config 文件并重新启动 sshd。这仅允许指定用户在 /somefir 树中使用 sftp。
答案2
问题中的代码应保存为 .sh 文件,然后在云站点功能窗格中添加引用该文件名称的 cron 作业