适用场景:已安装军哥 LNMP 一键包,希望定期备份网站目录与 MySQL 数据库到本地或 FTP 远端;并掌握恢复步骤与安全加固。
参考来源: 军哥LNMP一键WEB环境自带备份脚本 设置定时本地和FTP远程备份
一、脚本位置与快速试跑
cd /root/lnmp1.7/tools # 不同版本路径可能为 /root/lnmp 或 /root/lnmp1.8
ls -l # 可见 backup.sh
./backup.sh # 手动执行一次,确认能正常生成备份
建议:首次执行前先完成下文的配置;若执行成功,会在设定目录下生成 tar.gz(站点)与 .sql(数据库)等备份文件。
二、编辑配置文件的关键参数
用你习惯的编辑器打开(有的版本参数直接写在 backup.sh 顶部):
vi /root/lnmp1.7/tools/backup.sh
# 或 vi /root/lnmp1.7/tools/backup.conf (若脚本把配置分离)
1)基础路径
Backup_Home="/home/backup/" # 备份保存目录(建议单独数据盘)
MySQL_Dump="/usr/local/mysql/bin/mysqldump" # mysqldump 可执行文件路径
2)站点与数据库清单(可多项)
# 站点目录:一项一个,用空格分隔
Backup_Dir=("/home/wwwroot/a.com" "/home/wwwroot/b.com")
# 数据库名称:一项一个,用空格分隔
Backup_Database=("wordpress" "shop_db")
3)数据库认证
MYSQL_UserName='root'
MYSQL_PassWord='yourpassword'
更安全做法:把账号密码写到 /root/.my.cnf,并删掉脚本中的明文密码。
[client]
user=root
password=yourpassword
权限加固:
chmod 600 /root/.my.cnf
4)FTP 远程备份(可选)
# 注意:该脚本里 0=开启,1=关闭(与直觉相反)
Enable_FTP=0
FTP_Host='1.2.3.4'
FTP_Username='test.noth.me'
FTP_Password='yourftppassword'
FTP_Dir="backup"
提示:若你的脚本注释与此不同,请以脚本内说明为准。
5)(可选)忽略目录与保留周期
有些版本支持忽略大文件/缓存目录或设置保留天数;若无,可在备份后用 find 清理:
# 清理 7 天前的旧备份(示例)
find /home/backup/ -type f -mtime +7 -delete
三、保存并测试
bash -n /root/lnmp1.7/tools/backup.sh # 语法检查(可选)
/root/lnmp1.7/tools/backup.sh # 立即执行一次(必做)
执行完成后,检查 Backup_Home 目录是否生成对应站点的 .tar.gz 与数据库的 .sql 文件。
四、添加定时任务(crontab)
crontab -e
每天凌晨 1 点执行备份:
00 01 * * * /bin/bash /root/lnmp1.7/tools/backup.sh >> /var/log/lnmp_backup.log 2>&1
其他常用计划:
- 每周一凌晨 2 点:
00 02 * * 1 /bin/bash /root/lnmp1.7/tools/backup.sh - 每月 1 日 3 点:
00 03 1 * * /bin/bash /root/lnmp1.7/tools/backup.sh
五、恢复演练(强烈建议先在测试环境演练一次)
1)恢复站点文件
# 切到站点根(注意替换为你的真实路径)
cd /home/wwwroot/a.com
# 解压备份包(会覆盖同名文件,务必先备份现有目录)
tar -xzvf /home/backup/a.com-2025-10-24.tar.gz
2)恢复数据库
# 新建空库(库名与备份同名或按需新名)
mysql -uroot -p -e "CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4;"
# 导入 SQL
mysql -uroot -p wordpress < /home/backup/wordpress-2025-10-24.sql
3)常见恢复问题
- 字符集乱码:建库时用
utf8mb4;导入前确保my.cnf中character-set-server=utf8mb4。 - 权限不足:确认站点目录属主/组与 Nginx/PHP 用户一致,如
chown -R www:www /home/wwwroot/a.com。
六、进阶与安全加固
- 最小权限:
chmod 700 /home/backup;脚本仅 root 可读写执行。 - 压缩比与速度:可将
tar -z调整为zstd(若脚本支持)。 - 异地冗余:除 FTP 外,可同步到对象存储(S3/OSS/COS)或用
rclone。 - 告警通知:在脚本末尾追加邮件/Telegram/Webhook 成功/失败通知。
- 日志留存:使用上文 crontab 重定向到
/var/log/lnmp_backup.log,便于审计。
七、完整参数示例(可复制参考)
# ========= backup.conf 示例(按你的脚本结构调整)=========
Backup_Home="/home/backup/"
MySQL_Dump="/usr/local/mysql/bin/mysqldump"
Backup_Dir=(
"/home/wwwroot/a.com"
"/home/wwwroot/b.com"
)
Backup_Database=(
"wordpress"
"shop_db"
)
# 建议使用 /root/.my.cnf 存储凭据
MYSQL_UserName='root'
MYSQL_PassWord='yourpassword'
# FTP:0 开启,1 关闭(以你的脚本注释为准)
Enable_FTP=0
FTP_Host='1.2.3.4'
FTP_Username='test.noth.me'
FTP_Password='yourftppassword'
FTP_Dir="backup"
# (可选)保留策略:无原生变量时用 find 清理旧文件
# find /home/backup/ -type f -mtime +7 -delete
# =======================================================
常见问题(FAQ)
| 问题 | 原因 | 解决办法 |
|---|---|---|
| 脚本执行无输出/无文件 | 目录不存在或权限不足 | 确保 Backup_Home、站点目录存在且可写;检查脚本可执行权限 chmod +x backup.sh |
| 数据库备份为空 | 账号无权限或密码错误 | 用 mysql -uroot -p -e "show databases;" 验证;改用 ~/.my.cnf |
| FTP 上传失败 | 开关置反/防火墙/被动模式 | 确认 Enable_FTP 取值;尝试被动模式或改用 SFTP/OSS |
| 定时任务未执行 | cron 未启动或 PATH 不同 | 启动 systemctl enable --now crond;crontab 中使用绝对路径 |
结语
按本文配置好 backup.sh 并通过 crontab 定时执行,你即可获得“本地 + 远程”的多层备份保障。请务必定期做恢复演练








