Halo2.x版本没有自动备份的功能,参考网上的文章,写了一个脚本,每天定时备份文件到阿里云的对象存储OSS。

ossutil安装与使用

阿里云OSS有很多使用方法,除了网页的手动使用外,还有很多工具和SDK,这里用的ossutil,安装可以参考官方网站:安装ossutil

我的ecs实例是centos,安装过程如下:

  1. 安装

    sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash

  2. 配置

    `ossutil config` 交互式输入参数,第一个参数是配置文件位置,回车默认即可;接着分别设置语言CHEN 、 Endpoint、AccessKey ID、AccessKey Secret和STSToken(可忽略)参数。

备份脚本

  1. 准备工作:在halo工作目录层(不同版本可以叫法不同,可能是.halo2)创建一个 backup 目录 mkdir backup 。另外,我的halo2.4安装方式是docker-compose,数据库使用的pg库;备份脚本适用所有情况,需要自行注意文件名称与路径。

Snipaste_2023-04-15_12-28-33.png

  1. 执行脚本:(2023-4-27新增备份7天的功能)

#当前时间
dd=`date +%Y-%m-%d`
dd7=`date -d'-7 day' +%Y-%m-%d`
echo "执行halo文件备份!备份时间: $dd"
#压缩halo文件
tar czf ./backup/halo-$dd.tar.gz ./halo
#打印备份成功日志
echo "halo文件备份成功!  halo-$dd.tar.gz 压缩成功!"
echo "压缩后文件存储路径为---->> ./backup/halo-$dd.tar.gz"
echo "执行文件上传至阿里云oss!上传时间为:$dd"
#执行文件上传至阿里云oss操作 /ossutil64 cp 是ossutil64文件上传命令 你要上传的文件  oss://你的桶名backetName 
ossutil64 cp ./backup/halo-$dd.tar.gz oss://lixx-cn/site/$dd/ -f
echo "halo备份文件上传至阿里云oss成功!"
echo "==============================上传成功=================================="
echo "-------------过期删除前7天备份文件---------时间:$dd---------"
#查看7天之前的文件
cd ./backup
find . -mtime +7 -type f -name "*.gz" -exec ls {} \;
echo "执行删除7天之前的文件!"
#删除7天之前的文件
find . -mtime +7 -type f -name "*.gz" -exec rm {} \;
echo "删除7天之前的文件成功!  删除时间:$dd  "
#删除阿里云oss
echo "删除阿里云OSS 7天前的目录,目录为:$dd7  "
ossutil64 rm oss://lixx-cn/site/$dd7/ -rf
echo "================================删除完成================================"

bash oss.sh 执行,已上传到阿里云OSS。

注意:如果使用子账号ak/sk,对象存储访问控制ACL策略为私有,需要给子账号授权策略AliyunOSSFullAccess

日志如下

./halo/db/pg_dynshmem/
./halo/db/pg_commit_ts/
./halo/db/pg_serial/
halo文件备份成功!  halo-2023-04-15.tar.gz 压缩成功!
压缩后文件存储路径为---->> ./backup/halo-2023-04-15.tar.gz
执行文件上传至阿里云oss!上传时间为:2023-04-15
Succeed: Total num: 1, size: 43,673,286. OK num: 1(skip 1 files), Skip size: 43,673,286.

average speed 0(byte/s)

0.103383(s) elapsed
halo备份文件上传至阿里云oss成功!
==============================上传成功==================================
-------------过期删除前30天备份文件---------时间:2023-04-15---------
执行删除30天之前的文件!
删除30天之前的文件成功!  删除时间:2023-04-15  
================================删除完成================================
  1. OSS已经上传成功

Snipaste_2023-04-15_12-41-23.png

定时执行

使用crontab来进行定时执行脚本,查看crontab进程运行状态,没有启动或安装即可。

status crontab

Snipaste_2023-04-15_12-36-37.png

crontab -e后输入定时执行命令,每天凌晨2点执行,路径跟进实际自行修改。

0 2 * * * bash /root/oss.sh >> /root/backup/backup.log

:wq 保存退出即可。

这样就完成了定时备份到阿里云对象存储,迁移的时候下载解压,再用docker-compose启动即可,再也不怕丢失了~

参考

安装ossutil

配置ossutil

创建AccessKey

超详细的Linux数据库定时备份及上传至阿里云oss_不懂代码的小猿的博客-CSDN博客