
🎣 为了本社区网站的数据备份,特意写了以下脚本和设置定时任务
$ crontab -l
1 1 */7 * * cd /root/logs && ./mvlog.sh nginx-php
11 1 */7 * * cd /root/logs && ./mvlog.sh mysql-db-1
11 3 */7 * * cd /var/www && bash backup_flarum.sh
$ cat backup_flarum.sh
docker exec -it mysql-db-1 sh -c "mysqldump -u root -p数据库mysql密码 --databases flarum | gzip > /tmp/flarum.sql.gz"
docker cp mysql-db-1:/tmp/flarum.sql.gz $(date +"%Y%W")flarum.sql.gz
tar cvzf $(date +"%Y%W")flarum.tar.gz flarum
scp $(date +"%Y%W")flarum.sql.gz 188.远程IP.188:/root/2025bak/
scp $(date +"%Y%W")flarum.tar.gz 188.远程IP.188:/root/2025bak/
$ cat mvlog.sh
SERV=$1
log=$(docker inspect $SERV | grep log | awk -F\" '{print $4}')
docker stop $SERV
mv $log $SERV.log
docker start $SERV
🐟️ 经过半年多测试,备份数据情绪稳定
$ ll
total 1189296
-rw-r--r-- 1 root root 305033 Dec 14 14:11 202450flarum.sql.gz
-rw-r--r-- 1 root root 53559473 Dec 14 14:11 202450flarum.tar.gz
-rw-r--r-- 1 root root 305033 Dec 21 14:11 202451flarum.sql.gz
-rw-r--r-- 1 root root 53637536 Dec 21 14:11 202451flarum.tar.gz
-rw-r--r-- 1 root root 305033 Dec 28 14:11 202452flarum.sql.gz
-rw-r--r-- 1 root root 53705924 Dec 28 14:11 202452flarum.tar.gz
-rw-r--r-- 1 root root 305033 Dec 31 14:11 202500flarum.sql.gz
-rw-r--r-- 1 root root 53699336 Dec 31 14:11 202500flarum.tar.gz
-rw-r--r-- 1 root root 305033 Jan 7 14:11 202501flarum.sql.gz
-rw-r--r-- 1 root root 53879307 Jan 7 14:11 202501flarum.tar.gz
-rw-r--r-- 1 root root 305033 Jan 14 14:11 202502flarum.sql.gz
-rw-r--r-- 1 root root 53885934 Jan 14 14:11 202502flarum.tar.gz
-rw-r--r-- 1 root root 305033 Jan 21 14:11 202503flarum.sql.gz
-rw-r--r-- 1 root root 54045206 Jan 21 14:11 202503flarum.tar.gz
-rw-r--r-- 1 root root 305033 Jan 31 14:11 202504flarum.sql.gz
-rw-r--r-- 1 root root 54047364 Jan 31 14:11 202504flarum.tar.gz
-rw-r--r-- 1 root root 305033 Feb 7 14:11 202505flarum.sql.gz
-rw-r--r-- 1 root root 54306044 Feb 7 14:11 202505flarum.tar.gz
-rw-r--r-- 1 root root 305033 Feb 14 14:11 202506flarum.sql.gz
-rw-r--r-- 1 root root 54306087 Feb 14 14:11 202506flarum.tar.gz
-rw-r--r-- 1 root root 305033 Feb 21 14:11 202507flarum.sql.gz
-rw-r--r-- 1 root root 54424629 Feb 21 14:11 202507flarum.tar.gz
-rw-r--r-- 1 root root 305033 Feb 28 14:11 202508flarum.sql.gz
-rw-r--r-- 1 root root 54426655 Feb 28 14:11 202508flarum.tar.gz
-rw-r--r-- 1 root root 305033 Mar 7 14:11 202509flarum.sql.gz
-rw-r--r-- 1 root root 54425273 Mar 7 14:11 202509flarum.tar.gz
-rw-r--r-- 1 root root 305033 Mar 14 15:11 202510flarum.sql.gz
-rw-r--r-- 1 root root 54521941 Mar 14 15:11 202510flarum.tar.gz
-rw-r--r-- 1 root root 305033 Mar 21 15:11 202511flarum.sql.gz
-rw-r--r-- 1 root root 56320334 Mar 21 15:11 202511flarum.tar.gz
-rw-r--r-- 1 root root 305033 Mar 28 15:11 202512flarum.sql.gz
-rw-r--r-- 1 root root 56397035 Mar 28 15:11 202512flarum.tar.gz
-rw-r--r-- 1 root root 305033 Mar 31 15:11 202513flarum.sql.gz
-rw-r--r-- 1 root root 56435826 Mar 31 15:11 202513flarum.tar.gz
-rw-r--r-- 1 root root 305033 Apr 7 15:11 202514flarum.sql.gz
-rw-r--r-- 1 root root 56558205 Apr 7 15:11 202514flarum.tar.gz
-rw-r--r-- 1 root root 305033 Apr 14 15:11 202515flarum.sql.gz
-rw-r--r-- 1 root root 56617254 Apr 14 15:11 202515flarum.tar.gz
-rw-r--r-- 1 root root 305033 Apr 21 15:11 202516flarum.sql.gz
-rw-r--r-- 1 root root 56617036 Apr 21 15:11 202516flarum.tar.gz
-rw-r--r-- 1 root root 305033 Apr 30 15:11 202517flarum.sql.gz
-rw-r--r-- 1 root root 57451230 Apr 30 15:11 202517flarum.tar.gz
-rw-r--r-- 1 root root 305033 May 7 15:11 202518flarum.sql.gz
-rw-r--r-- 1 root root 57727878 May 7 15:11 202518flarum.tar.gz
AI 评价网站数据备份源码,主要包括定时任务、网站数据备份脚本和清理容器日志脚本。
总体评价:
这段代码展示了一个基本的网站备份和日志管理方案,包括数据库备份、网站文件备份和容器日志清理。整体结构清晰,目标明确。但是,在安全性、效率、可维护性以及容错性方面存在一些可以改进的地方。
详细评价:
定时任务 (Crontab):
- 频率: 每7天执行一次备份和日志清理,频率可能需要根据数据更新的频率调整。如果数据变动频繁,可以考虑增加备份频率。
- 时间: 每天的特定时间执行,避免在业务高峰期执行,减少对网站性能的影响。
- 用户: 建议使用非root用户执行定时任务,降低安全风险。
- 日志: 建议将定时任务的输出重定向到日志文件,方便排查问题。
- 问题:
mvlog.sh
脚本在停止容器后直接移动日志文件,可能会导致正在进行的日志写入丢失。
备份脚本 (backup_flarum.sh):
日志清理脚本 (mvlog.sh):
建议改进措施:
- 安全性:
- 使用环境变量或配置文件存储数据库密码。
- 使用 SSH 密钥认证进行远程备份。
- 使用非 root 用户执行定时任务。
- 效率:
- 使用
.tarignore
文件排除不必要的文件。
- 优化数据库备份命令,减少锁表时间。
- 可维护性:
- 将脚本拆分成多个函数,提高代码的可读性和可重用性。
- 添加注释,解释代码的逻辑。
- 容错性:
- 添加错误处理机制,例如使用
set -e
命令,并在关键步骤中检查返回值。
- 添加日志记录,方便排查问题。
- 日志管理:
- 使用
docker logs
命令或 logrotate
工具来管理容器的日志。
总结:
这段代码是一个基础的网站备份和日志管理方案,但存在一些安全、效率、可维护性和容错性方面的问题。通过改进这些方面,可以提高代码的质量和可靠性。