为知笔记并自动备份

使用飞牛nas搭建为知笔记服务端非常简单,这里不赘述了。

查看为知笔记docker镜像并连接

docker ps -a
docker exec -it  <image id> /bin/bash

查看mysql数据库密码

cat /wiz/app/entrypoint.sh

自动备份数据库

#!/bin/bash

# 配置
BACKUP_DIR="/wiz/backup/sql"
MYSQL_USER="root"
MYSQL_PASSWORD="数据库密码"
DATABASE_NAME="wizasent"
LOG_FILE="$BACKUP_DIR/backup.log"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 记录日志
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

# 显示帮助信息
show_help() {
    echo "Usage: $0 [backup|restore] [options]"
    echo "Options:"
    echo "  backup   - 备份数据库"
    echo "  restore  - 恢复数据库"
    echo "  --file   - 指定备份文件(仅用于恢复)"
    exit 1
}

# 备份数据库
backup_db() {
    local DAY_OF_WEEK=$(date +%u) # 获取星期几(1-7)
    local BACKUP_FILE="$BACKUP_DIR/${DATABASE_NAME}_backup_${DAY_OF_WEEK}.sql.gz"

    log "Starting backup of database: $DATABASE_NAME"
    mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME | gzip > $BACKUP_FILE

    if [ $? -eq 0 ]; then
        log "Backup completed: $BACKUP_FILE"
    else
        log "Backup failed!"
        exit 1
    fi
}

# 恢复数据库
restore_db() {
    local BACKUP_FILE=$1

    if [ -z "$BACKUP_FILE" ]; then
        log "Error: Backup file not specified."
        show_help
    fi

    if [ ! -f "$BACKUP_FILE" ]; then
        log "Error: Backup file not found: $BACKUP_FILE"
        exit 1
    fi

    log "Starting restore of database: $DATABASE_NAME from $BACKUP_FILE"
    gunzip < $BACKUP_FILE | mysql -u$MYSQL_USER -p$MYSQL_PASSWORD $DATABASE_NAME

    if [ $? -eq 0 ]; then
        log "Restore completed successfully."
    else
        log "Restore failed!"
        exit 1
    fi
}

# 主逻辑
if [ $# -eq 0 ]; then
    show_help
fi

case $1 in
    backup)
        backup_db
        ;;
    restore)
        if [ "$2" == "--file" ]; then
            restore_db "$3"
        else
            log "Error: Missing --file parameter for restore."
            show_help
        fi
        ;;
    *)
        log "Error: Invalid operation."
        show_help
        ;;
esac

备份命令

./backup_script.sh backup

备份文件会保存到 /wiz/backup 目录,文件名以星期几命名,例如:
星期一:wizasent_backup_1.sql.gz
星期二:wizasent_backup_2.sql.gz

星期日:wizasent_backup_7.sql.gz

恢复命令

./backup_script.sh restore --file /wiz/backup/wizasent_backup_1.sql.gz

从指定的备份文件恢复数据库。

查看日志

cat /wiz/backup/backup.log

查看备份和恢复操作的日志。

设置定时任务

为了实现每天自动备份,可以使用 crontab 设置定时任务。
打开 crontab 编辑器:

crontab -e

添加以下内容,每天凌晨 2 点执行备份脚本:

0 2 * * * /path/to/backup_script.sh backup >> /wiz/backup/backup.log 2>&1

备份数据

#!/bin/bash

# 定义源目录和目标目录
SRC_DIR="/wiz"
BACKUP_DIR="/wiz/backup/data"

# 获取当前是星期几(1代表周一,2代表周二,...,7代表周日)
DAY_OF_WEEK=$(date +%u)

# 定义备份文件名
BACKUP_NAME="wiz_data_backup_$DAY_OF_WEEK.tar.gz"

# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"

# 打包并压缩 /wiz 目录下非 backup 目录的内容
tar -czf "$BACKUP_DIR/$BACKUP_NAME" --exclude="$SRC_DIR/backup" -C "$SRC_DIR" .

# 输出备份完成信息
echo "备份完成: $BACKUP_DIR/$BACKUP_NAME"

由于百度云不支持4g以上大文件上传,因此改为每900M一个文件。

新的备份数据脚本

#!/bin/bash
# 定义源目录和目标目录
SRC_DIR="/wiz"
BACKUP_DIR="/wiz/backup/data"

# 获取当前是星期几(1代表周一,2代表周二,...,7代表周日)
DAY_OF_WEEK=$(date +%u)

# 定义备份文件名及基础名称BACKUP_NAME="wiz_data_backup_$DAY_OF_WEEK.tar.gz"
BACKUP_BASENAME="wiz_data_backup_$DAY_OF_WEEK"

# 创建备份子目录(如果不存在)
mkdir -p "$BACKUP_DIR/$BACKUP_BASENAME"

# 打包、压缩并分卷(使用900MB分卷大小)
tar -cz --exclude="$SRC_DIR/backup" -C "$SRC_DIR" . | split -d -b 900M --numeric-suffixes=1 -a 3 - "$BACKUP_DIR/$BACKUP_BASENAME/$BACKUP_BASENAME.tar.gz."

# 输出备份完成信息
echo "备份完成: 分卷文件已保存至 $BACKUP_DIR/$BACKUP_BASENAME/"

备份恢复

# 进入备份目录
cd $BACKUP_DIR/$BACKUP_BASENAME
# 合并分卷并解压
cat wiz_data_backup_*.tar.gz.* | tar -xz -C /目标路径

定时备份docker到腾讯云

#!/bin/bash

# 配置
DOCKER_CONTAINER_NAME="wizserver"                         # 容器名称
TENCENT_REGISTRY="ccr.ccs.tencentyun.com"                 # 腾讯云容器镜像仓库地址
TENCENT_NAMESPACE=""                            # 腾讯云命名空间(你的用户名)
TENCENT_REPO="wiznote"                                    # 腾讯云仓库名称
TENCENT_USER=""                                 # 腾讯云 Docker 仓库用户名
TENCENT_PASSWORD=""                        # 腾讯云 Docker 仓库密码
BACKUP_DIR="/backup/wiznote/docker"                       # 本地备份目录
LOG_FILE="/backup/wiznote/docker/backup.log"              # 日志文件

# 创建备份目录
mkdir -p $BACKUP_DIR

# 记录日志
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

# 登录腾讯云 Docker 仓库
login_tencent_registry() {
    echo "$TENCENT_PASSWORD" | docker login -u "$TENCENT_USER" --password-stdin "$TENCENT_REGISTRY"
    if [ $? -eq 0 ]; then
        log "Logged in to Tencent Cloud Docker Registry."
    else
        log "Failed to log in to Tencent Cloud Docker Registry."
        exit 1
    fi
}

# 获取当前星期几对应的编号(1-7,周一为1,周日为7)
get_weekday_number() {
    local WEEKDAY=$(date +%u)  # %u: 1-7, Monday is 1
    echo "v$WEEKDAY"
}

# 备份 Docker 容器并上传到腾讯云
backup_docker_container() {
    local TAG=$(get_weekday_number)
    local TENCENT_IMAGE="$TENCENT_REGISTRY/$TENCENT_NAMESPACE/$TENCENT_REPO:$TAG"
    local TENCENT_IMAGE_LATEST="$TENCENT_REGISTRY/$TENCENT_NAMESPACE/$TENCENT_REPO:latest"

    log "Starting backup of Docker container: $DOCKER_CONTAINER_NAME"

    # 将容器提交为镜像
    docker commit "$DOCKER_CONTAINER_NAME" "$TENCENT_IMAGE"
    if [ $? -eq 0 ]; then
        log "Docker container committed as image: $TENCENT_IMAGE"
    else
        log "Failed to commit Docker container as image."
        exit 1
    fi

    # 为镜像打上 latest 标签
    docker tag "$TENCENT_IMAGE" "$TENCENT_IMAGE_LATEST"
    if [ $? -eq 0 ]; then
        log "Docker image tagged as latest: $TENCENT_IMAGE_LATEST"
    else
        log "Failed to tag Docker image as latest."
        exit 1
    fi

    # 上传镜像到腾讯云(包括星期标签和 latest 标签)
    docker push "$TENCENT_IMAGE"
    if [ $? -eq 0 ]; then
        log "Docker image pushed to Tencent Cloud: $TENCENT_IMAGE"
    else
        log "Failed to push Docker image to Tencent Cloud: $TENCENT_IMAGE"
        exit 1
    fi

    docker push "$TENCENT_IMAGE_LATEST"
    if [ $? -eq 0 ]; then
        log "Docker image pushed to Tencent Cloud: $TENCENT_IMAGE_LATEST"
    else
        log "Failed to push Docker image to Tencent Cloud: $TENCENT_IMAGE_LATEST"
        exit 1
    fi

    # 清理本地镜像
    docker rmi "$TENCENT_IMAGE" "$TENCENT_IMAGE_LATEST"
    if [ $? -eq 0 ]; then
        log "Local Docker images removed: $TENCENT_IMAGE and $TENCENT_IMAGE_LATEST"
    else
        log "Failed to remove local Docker images."
    fi
}

# 主逻辑
login_tencent_registry
backup_docker_container

启动镜像

#!/bin/bash

# 配置
DOCKER_IMAGE="ccr.ccs.tencentyun.com/.../wiznote:[tag]"  # 使用 latest 标签
CONTAINER_NAME="wizserver"
BACKUP_DIR="/backup/wiznote"
LOG_FILE="/backup/wiznote/docker/start.log"
TENCENT_REGISTRY="ccr.ccs.tencentyun.com"                 # 腾讯云容器镜像仓库地址
TENCENT_USER=""                                 # 腾讯云 Docker 仓库用户名
TENCENT_PASSWORD="l"                        # 腾讯云 Docker 仓库密码

# 创建日志目录
mkdir -p "$(dirname "$LOG_FILE")"

# 记录日志
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# 登录腾讯云 Docker 仓库
login_tencent_registry() {
    log "Logging in to Tencent Cloud Docker Registry..."
    echo "$TENCENT_PASSWORD" | docker login -u "$TENCENT_USER" --password-stdin "$TENCENT_REGISTRY"
    if [ $? -eq 0 ]; then
        log "Successfully logged in to Tencent Cloud Docker Registry."
    else
        log "Failed to log in to Tencent Cloud Docker Registry."
        exit 1
    fi
}

# 拉取最新镜像
pull_latest_image() {
    log "Pulling latest Docker image: $DOCKER_IMAGE"
    docker pull "$DOCKER_IMAGE"
    if [ $? -eq 0 ]; then
        log "Successfully pulled Docker image: $DOCKER_IMAGE"
    else
        log "Failed to pull Docker image: $DOCKER_IMAGE"
        exit 1
    fi
}

# 停止并删除现有容器(如果存在)
cleanup_existing_container() {
    if docker ps -a --format '{{.Names}}' | grep -q "^$CONTAINER_NAME$"; then
        log "Stopping and removing existing container: $CONTAINER_NAME"
        docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME"
        if [ $? -eq 0 ]; then
            log "Successfully stopped and removed container: $CONTAINER_NAME"
        else
            log "Failed to stop and remove container: $CONTAINER_NAME"
            exit 1
        fi
    fi
}

# 启动新容器
start_new_container() {
    log "Starting new container: $CONTAINER_NAME"
    docker run -d \
      --name "$CONTAINER_NAME" \
      -p 9269:9269/udp \
      -p 9280:80/tcp \
      -v "$BACKUP_DIR:/wiz/backup" \
      -v /etc/localtime:/etc/localtime:ro \
      -v /etc/timezone:/etc/timezone:ro \
      --memory="2g" \
      --memory-swap="4g" \
      "$DOCKER_IMAGE" \
      /wiz/app/entrypoint.sh

    if [ $? -eq 0 ]; then
        log "Successfully started container: $CONTAINER_NAME"
    else
        log "Failed to start container: $CONTAINER_NAME"
        exit 1
    fi
}

# 主逻辑
login_tencent_registry
pull_latest_image
cleanup_existing_container
start_new_container

设置进程监控

#!/bin/bash

# 配置
CONTAINER_NAME="wizserver"
LOG_FILE="/backup/wiznote/docker/monitor.log"

# 记录日志
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# 检查容器是否在运行
if docker ps --format '{{.Names}}' | grep -q "^$CONTAINER_NAME$"; then
    log "WizServer container is running."
else
    log "WizServer container is not running. Starting it now..."

    # 调用启动脚本
    /root/start_wiznote_docker.sh

    if [ $? -eq 0 ]; then
        log "WizServer container started successfully."
    else
        log "Failed to start WizServer container."
    fi
fi

定时任务总览

系统内

0  2    * * *   root    sh /root/backup_wiz_docker.sh
30 1    * * *   root    /usr/bin/cp -r /backup/wiznote/ /vol1/1000/日记文件/ && rm -rf /backup/wiznote/data/wiz_data_backup*
*/5  *    * * *   root    sh /root/monitor_wiznote.sh

docker

0 1 * * * root sh /root/backup_wiz_sql.sh backup >> /wiz/backup/sql/backup.log 2>&1
0 1 * * * root sh /root/backup_wiz_data.sh  >> /wiz/backup/sql/backup.log 2>&1

默认管理用户密码

123456

SELECT * FROM wiz_user ;
+----+--------------------------------------+-----------------+--------+---------------+----------------------------------+---------------+--------+------------+--------------+---------------------+---------------------+------------+------------+-------------+---------------------+---------------+----------------+-----------+
| ID | USER_GUID                            | EMAIL           | MOBILE | DISPLAYNAME   | PASSWORD                         | USER_LANGUAGE | POINTS | CREATED_BY | EMAIL_VERIFY | VIP_DATE            | DT_CREATED          | USER_STATE | GMT_OFFSET | MEDAL_COUNT | LAST_LOGIN          | MOBILE_VERIFY | avatar_version | TENANT_ID |
+----+--------------------------------------+-----------------+--------+---------------+----------------------------------+---------------+--------+------------+--------------+---------------------+---------------------+------------+------------+-------------+---------------------+---------------+----------------+-----------+
|  1 | 00000000-0000-0000-0000-000000000000 | admin@wiz.cn    | NULL   | Administrator | a9da87c000d58437ffd94b020dc221c9 | zh_CN         |      0 |       NULL |            0 | 2100-02-01 00:00:00 | 2014-03-10 18:45:42 |          2 |       NULL |           0 | 2025-01-19 16:01:31 |          NULL |           NULL | NULL      |
|  2 | 053505f0-d630-11ef-9c51-8b244c0106be | template@wiz.cn | NULL   | template      | d67cca55c930bc8797713f7eb6cf020f | zh_CN         |      0 |       NULL |            0 | NULL                | 2025-01-19 14:38:41 |         -1 |       NULL |           0 | 2025-01-19 15:58:35 |          NULL |           NULL | NULL      |
+----+--------------------------------------+-----------------+--------+---------------+----------------------------------+---------------+--------+------------+--------------+---------------------+---------------------+------------+------------+-------------+---------------------+---------------+----------------+-----------+
2 rows in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值