敲命令前,请三思;数据无价,备份先行。
使用 Linux 操作系统的 VPS 时,大多数朋友都是通过命令行操作,缺少像 Windows 那样直观的图形界面。而某些 Linux 命令一旦执行错误,可能导致不可逆的严重后果——轻则服务中断,重则数据全丢。
尤其对于使用 LNMP 等环境建站的站长来说,通常没有可视化面板,更缺乏自动备份机制。但请记住:网站数据,可能就是你的“数字生命”。因此,掌握基础的数据安全保障技能,是每位站长的必修课。
今天,我们就来分享一个全自动备份脚本,可将你的网站文件 + MySQL 数据库打包,并上传至远程 FTP 服务器,实现异地容灾。
📦 脚本功能说明
- 自动导出所有 MySQL 数据库(每个库单独压缩)
- 打包本地网站目录(如
/home/wwwroot) - 删除本地 3 天前的旧备份,节省空间
- 上传最新备份到远程 FTP
- 自动清理 FTP 上 5 天前的旧文件
🔧 使用步骤
第一步:创建并编辑备份脚本
将以下内容保存为 /root/AutoBackup.sh,并根据你的实际环境修改参数部分:
#!/bin/bash
# ========== 请在此处修改你的配置 ==========
MYSQL_USER=*** # 替换为你的 MySQL 用户名
MYSQL_PASS=*** # 替换为你的 MySQL 密码
FTP_IP=*** # 远程 FTP 地址(如 ftp.example.com 或 IP)
FTP_USER=*** # FTP 用户名
FTP_PASS=*** # FTP 密码
FTP_backup=*** # FTP 上用于存放备份的目录(需提前创建)
WEB_DATA=/home/wwwroot # 本地网站根目录
# =========================================
# 自动安装 ftp 工具(如未安装)
if [ ! -f /usr/bin/ftp ]; then
yum install ftp -y
fi
# 创建本地备份目录
if [ ! -d /home/backup ]; then
mkdir -p /home/backup
fi
# 定义文件名
DataBakName=Data_$(date +"%Y%m%d").tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
# 删除本地 3 天前的备份
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz
cd /home/backup
# 导出所有数据库(每个库一个 .sql.gz 文件)
for db in $(/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs); do
(/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} -q --skip-lock-tables | gzip -9 - > ${db}.sql.gz
echo "✅ Dumped: ${db}.sql.gz")
done
# 打包网站文件 + 数据库
tar zcf /home/backup/$DataBakName $WEB_DATA /home/backup/*.sql.gz
# 清理临时数据库文件
rm -rf /home/backup/*.sql.gz
# 上传到 FTP 并删除远程旧备份
ftp -v -n $FTP_IP << END
user $FTP_USER $FTP_PASS
type binary
cd $FTP_backup
delete $OldData
put $DataBakName
bye
END
💡 注意:
- 脚本中路径
/usr/local/mysql/bin/mysql适用于 LNMP 一键包。如果你使用的是系统默认 MySQL(如apt或yum安装),请改为mysql和mysqldump(无需完整路径)。- 确保远程 FTP 目录
$FTP_backup已手动创建,否则上传会失败。
第二步:赋予脚本执行权限
chmod +x /root/AutoBackup.sh
第三步:设置定时任务(每天自动运行)
执行:
crontab -e
添加一行(例如每天凌晨 00:00 执行):
0 0 * * * /root/AutoBackup.sh
✅ 小贴士:
- 如果你希望在凌晨 2:30执行,可写为:
30 2 * * * /root/AutoBackup.sh- 请避开网站访问高峰期,减少服务器压力
保存并退出后,重启 cron 服务:
# CentOS / RHEL
service crond restart
chkconfig --level 2345 crond on
# Ubuntu / Debian
systemctl restart cron
systemctl enable cron
⚠️ 重要提醒
- 磁盘空间:确保
/home/backup所在分区有足够空间存放完整备份(建议至少为网站体积的 1.5 倍)。 - 大站慎用:若网站数据超过 5GB,压缩和上传过程可能较慢,甚至超时。建议拆分备份或升级 VPS 性能。
- 安全建议:
- 不要将密码明文写在脚本中(进阶用户可考虑使用
.my.cnf配置文件管理 MySQL 凭据) - 定期检查备份是否成功(可通过邮件通知或日志监控)
- 不要将密码明文写在脚本中(进阶用户可考虑使用
🌟 结语
自动化备份不是“可选项”,而是网站运维的底线。哪怕只花 10 分钟配置这个脚本,也能在未来某天帮你避免一场灾难。
数据丢了,网站就死了。备份一次,安心一年。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END














暂无评论内容