Linux服务器怎么写自动备份脚本?网站和数据库本地备份及FTP上传怎么实现?

文章导读
首先,创建一个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。打包所有
📋 目录
  1. 实际脚本示例
  2. crontab定时设置详解
  3. MySQL和网站双备份流程
  4. FTP上传优化
  5. 完整安全备份脚本
A A

首先,创建一个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定时设置详解

用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。

MySQL和网站双备份流程

网站文件在/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。

Linux服务器怎么写自动备份脚本?网站和数据库本地备份及FTP上传怎么实现?

FTP上传优化

安装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"

Linux服务器怎么写自动备份脚本?网站和数据库本地备份及FTP上传怎么实现?

FAQ

Q: 脚本报错mysqldump命令不存在怎么办?
A: 安装mysql-client:yum install mysql或apt install mysql-client,然后重试。

Q: FTP连接失败怎么调试?
A: 先手动lftp测试连接,检查防火墙、用户名密码、端口21开放。

Linux服务器怎么写自动备份脚本?网站和数据库本地备份及FTP上传怎么实现?

Q: 备份文件太大上传慢?
A: 用gzip压缩,或rsync增量备份,或换SFTP更快。

Q: crontab不运行脚本?
A: 检查脚本路径绝对,权限755,crontab -l确认,/var/log/cron看日志。