首先,创建一个bash脚本文件,比如用nano编辑器:nano backup.sh。然后在里面写备份逻辑。本地备份网站:tar -czf /backup/website_$(date +%Y%m%d).tar.gz /var/www/html。数据库备份(MySQL为例):mysqldump -u用户名 -p密码 数据库名 > /backup/db_$(date +%Y%m%d).sql。打包所有:tar -czf full_backup_$(date +%Y%m%d).tar.gz /backup。上传FTP:用lftp命令,lftp -u 用户名,密码 ftp.server.com -e "put full_backup_$(date +%Y%m%d).tar.gz; bye"。加执行权限chmod +x backup.sh,用crontab -e设置每天凌晨2点运行:0 2 * * * /path/to/backup.sh。创建/backup目录:mkdir -p /backup。确保FTP服务器能连通。
实际脚本示例
#!/bin/bash
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
WEBSITE_BACKUP="$BACKUP_DIR/website_$DATE.tar.gz"
DB_BACKUP="$BACKUP_DIR/db_$DATE.sql"
mkdir -p $BACKUP_DIR
# 备份网站
tar -czf $WEBSITE_BACKUP /var/www/html
# 备份数据库
mysqldump -u root -p'yourpassword' yourdb > $DB_BACKUP
# 打包
FINAL_BACKUP="$BACKUP_DIR/full_$DATE.tar.gz"
tar -czf $FINAL_BACKUP $BACKUP_DIR/*
# FTP上传
lftp -u ftpuser ftppass@ftp.example.com < 用crontab -e进入编辑,添加一行:0 2 * * * /home/user/backup.sh >/dev/null 2>&1。这样每天凌晨2点自动跑脚本,不会发邮件通知。测试先用crontab -l看列表。路径要绝对路径,别用相对。脚本开头加#!/bin/bash。权限chmod 755 backup.sh。日志可以重定向到文件:>>/var/log/backup.log 2>&1。 网站文件在/var/www/html或nginx的html目录,用tar czvf备份。数据库mysqldump --all-databases -u root -p密码 --single-transaction > all_dbs.sql。网站备份排除.git和node_modules:tar --exclude='.git' --exclude='node_modules' -czf site.tar.gz /var/www。完成后scp到本地或用ncftpput上传FTP。脚本里加邮件通知:mail -s "备份完成" your@email.com < /tmp/backup.log。 安装lftp:yum install lftp或apt install lftp。用curl也行:curl -T backup.tar.gz ftp://user:pass@ftp.server.com/backups/ --ftp-create-dirs。脚本里检查上传成功:if lftp ...; then echo "上传OK"; else echo "失败"; fi。被动模式:set ftp:passive-mode yes。大文件分卷用ncftp。别明文密码,用expect或配置文件。 # 安全版备份
DB_USER="dbuser"
DB_PASS="dbpass"
SITE="/var/www/html"
FTP_HOST="ftp.example.com"
FTP_USER="ftpuser"
FTP_PASS="ftppass"
mysqldump -u$DB_USER -p$DB_PASS dbname | gzip > db.gz
tar czf site.tar.gz $SITE
zip -r full.zip db.gz site.tar.gz
lftp -e "set ftp:ssl-force true; open $FTP_HOST; user $FTP_USER $FTP_PASS; cd backup; put full.zip; quit" FAQ Q: 脚本报错mysqldump命令不存在怎么办? Q: FTP连接失败怎么调试? Q: 备份文件太大上传慢? Q: crontab不运行脚本?crontab定时设置详解
MySQL和网站双备份流程
FTP上传优化
完整安全备份脚本
A: 安装mysql-client:yum install mysql或apt install mysql-client,然后重试。
A: 先手动lftp测试连接,检查防火墙、用户名密码、端口21开放。
A: 用gzip压缩,或rsync增量备份,或换SFTP更快。
A: 检查脚本路径绝对,权限755,crontab -l确认,/var/log/cron看日志。