Leanote 数据备份

Leanote 不得不说还是建立私有笔记服务的比较好的选择之一。

我的部署服务通过二进制应用直接部署在服务器上,MongoDB 通过 Docker 部署在服务器上。

这样做发现备份是不能直接通过后台对数据库进行备份的。

所以,有了此文 😊

环境假设

假设我这边的目录设定是这样的

Leanote 安装在 /data/app 目录中,名字就是 leanote
我的备份文件计划存储在 /data/app/leanote_dbdump/ 目录中。
MongoDB 的 Docker 配置和启动文件我都存储在了 /data/cells/mongo 目录中。

备份数据,以每天为一个单位,(通过定时任务完成每天的数据自动备份和打包),存储至备份文件目录中。

备份脚本

数据库备份脚本文件 /data/app/leanote_dbdump/dbbak.sh。内容如下

#!/bin/bash
# 用于 Leanote 的 mongodb 通过 Docker 部署时,备份数据库的脚本
IMAGE="mongo"        # MongoDB 镜像名称
VERSION=":latest"    # MongoDB 镜像的版本
NAME="mongo"         # MongoDB 启动的容器名称

# 检查实例是否启动
EXISTS=$(docker ps | grep "$IMAGE$VERSION" | wc -l)
if [ $EXISTS -eq 0 ]
then
    # 未启动实例时,不进行备份
    echo "... instance of [$IMAGE$VERSION], now stoped, pless start it manually!"
    exit
fi

# 开始备份 ...
# Leanote 数据库备份的存放位置
LEANOTE_BACKUP="/data/app/leanote_dbdump"
# 获取当前日期的目录名称
TIMESTAMP=$(date +"%Y%m%d")
# 设置数据库备份导出目录地址 BAK_DIR
MONGO_ROOT="/data/cells/mongo" # Docker 配置目录
DATA_DIR="$MONGO_ROOT/export"  # Docker 配置目录中的一个导出目录
BAK_DIR="$DATA_DIR/$TIMESTAMP" # 最终脚本使用的导出目录地址

# [core] 进入 MongoDB 的 Docker 容器对数据库进行备份
docker run \
-it \
--link $NAME:mongo \
-v $BAK_DIR:/mnt \
$NAME \
sh -c 'exec mongodump --host $MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT -d leanote -o /mnt'

# 对数据库备份打包
cd $DATA_DIR
# 保存至设定的位置
tar czvf $LEANOTE_BACKUP/$TIMESTAMP.tar.gz -C $DATA_DIR $TIMESTAMP
# 清理当前导出的数据库版本
rm -Rf $BAK_DIR
cd -

手工测试一下

cd /data/app/leanote_dbdump
chmod +x dbbak.sh
./dbbak.sh

会发现在 /data/app/leanote_dbdump/ 目录下,就多出一个以当前日期为名称的导出的数据库压缩包文件。

设置定时任务

crontab -e

在定时任务列表中添加

0 1 * * *       /data/app/leanote_dbdump/dbbak.sh

这样就OK了。

暂时没有恢复需要。等未来需要有恢复功能的时候,看看再写一个基于 TUI 的功能手工选择恢复吧。

参考

赞赏