Linux必备:5分钟搞定自动备份

敲命令前,请三思;数据无价,备份先行。

使用 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(如 aptyum 安装),请改为 mysqlmysqldump(无需完整路径)。
  • 确保远程 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

⚠️ 重要提醒

  1. 磁盘空间:确保 /home/backup 所在分区有足够空间存放完整备份(建议至少为网站体积的 1.5 倍)。
  2. 大站慎用:若网站数据超过 5GB,压缩和上传过程可能较慢,甚至超时。建议拆分备份或升级 VPS 性能。
  3. 安全建议
    • 不要将密码明文写在脚本中(进阶用户可考虑使用 .my.cnf 配置文件管理 MySQL 凭据)
    • 定期检查备份是否成功(可通过邮件通知或日志监控)

🌟 结语

自动化备份不是“可选项”,而是网站运维的底线。哪怕只花 10 分钟配置这个脚本,也能在未来某天帮你避免一场灾难。

数据丢了,网站就死了。备份一次,安心一年。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容