军哥 LNMP 自带备份脚本:本地与 FTP 定时备份(含恢复与安全加固)

0
15

适用场景:已安装军哥 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.cnfcharacter-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 定时执行,你即可获得“本地 + 远程”的多层备份保障。请务必定期做恢复演练

发布回复

请输入评论!
请输入你的名字