分享:备份脚本

SeaTable的备份说明感觉很基础,我也是小白,根据官方说明以及自己的摸索,设置了如下自动备份脚本,应该有用,故在此分享给大家,如有错误或不妥,请大家指正:
本脚本作用:每天凌晨1点钟自动将数据库以及/opt/seatable/seatable-data/seatable目录备份到/opt/seatable-backup/备份日期/目录后打包压缩成为seatble-backup备份日期时间.tar.gz,删除备份日期临时备份目录后,将压缩包使用rsync命令同步到群晖服务器。同时删除本地目录中超过10天的备份压缩包。

第1步:打开群晖控制面板-文件服务 ,启用rsync服务 ,再启用rsync账户,设置账户密码为:你的账户和你的密码

第2步:建立备份总目录

mkdir /opt/seatable-backup/

第3步:建立同步群晖服务器rsync的密码文件(注意:服务端需要写用户名:密码,客户端只需要密码)

vim /etc/rsync.password
你的密码

第4步:安装rsync客户端

yum install -y rsync

第5步:建立备份脚本,脚本内容如下

vim /root/backup_to_nas.sh

#!/bin/bash

# 定义常量和变量
BACKUP_DIR="/opt/seatable-backup"
REMOTE_SERVER="你的账户@192.168.10.2::NetBackup/seatable/"
PASSWORD_FILE="/etc/rsync.password"
CURRENT_DATE=$(date +%Y%m%d)
CURRENT_TIME=$(date +%Y%m%d%H%M%S)
LOG_FILE="${BACKUP_DIR}/backup_log_${CURRENT_TIME}.log"
DB_PASSWORD="数据库密码"

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

# 执行命令并记录日志,若失败则退出
execute_command() {
    local command="$1"
    local success_message="$2"
    local error_message="$3"
    log "执行命令: $command"
    eval "$command"
    if [ $? -eq 0 ]; then
        log "$success_message"
    else
        log "$error_message"
        exit 1
    fi
}

# 开始执行脚本
log "开始执行 Seatable 备份脚本"

# 创建目标目录
execute_command "mkdir -p ${BACKUP_DIR}/${CURRENT_DATE}/databases/" \
    "成功创建目录 ${BACKUP_DIR}/${CURRENT_DATE}/databases/" \
    "错误: 无法创建目录 ${BACKUP_DIR}/${CURRENT_DATE}/databases/"

execute_command "mkdir -p ${BACKUP_DIR}/${CURRENT_DATE}/data/" \
    "成功创建目录 ${BACKUP_DIR}/${CURRENT_DATE}/data/" \
    "错误: 无法创建目录 ${BACKUP_DIR}/${CURRENT_DATE}/data/"

# 进入数据库备份目录
execute_command "cd ${BACKUP_DIR}/${CURRENT_DATE}/databases" \
    "成功进入目录 ${BACKUP_DIR}/${CURRENT_DATE}/databases" \
    "错误: 无法进入目录 ${BACKUP_DIR}/${CURRENT_DATE}/databases"

# 备份数据库
databases=("ccnet_db" "seafile_db" "dtable_db")
for db in "${databases[@]}"; do
    command="docker exec -i seatable-mysql mysqldump -uroot -p$DB_PASSWORD --opt $db > ${db}.sql"
    execute_command "$command" \
        "成功备份 $db 数据库" \
        "错误: 备份 $db 数据库失败"
done

# 复制数据
execute_command "cp -R /opt/seatable/seatable-data/seatable ${BACKUP_DIR}/${CURRENT_DATE}/data/" \
    "成功复制数据到 ${BACKUP_DIR}/${CURRENT_DATE}/data/" \
    "错误: 复制数据到 ${BACKUP_DIR}/${CURRENT_DATE}/data/ 失败"

# 删除不需要的目录
execute_command "cd ${BACKUP_DIR}/${CURRENT_DATE}/data" \
    "成功进入目录 ${BACKUP_DIR}/${CURRENT_DATE}/data" \
    "错误: 无法进入目录 ${BACKUP_DIR}/${CURRENT_DATE}/data"

execute_command "rm -rf ccnet logs" \
    "成功删除 ${BACKUP_DIR}/${CURRENT_DATE}/data 目录下的 ccnet 和 logs 文件夹" \
    "错误: 删除 ${BACKUP_DIR}/${CURRENT_DATE}/data 目录下的 ccnet 和 logs 文件夹失败"

# 打包备份目录
execute_command "cd ${BACKUP_DIR}" \
    "成功返回目录 ${BACKUP_DIR}" \
    "错误: 无法返回目录 ${BACKUP_DIR}"

execute_command "tar -zcf seatble-backup${CURRENT_TIME}.tar.gz --exclude='*.sock' ${CURRENT_DATE}" \
    "成功打包备份目录为 seatble-backup${CURRENT_TIME}.tar.gz" \
    "错误: 打包备份目录失败"

# 删除临时备份目录
execute_command "rm -rf ${BACKUP_DIR}/${CURRENT_DATE}" \
    "成功删除临时备份目录 ${BACKUP_DIR}/${CURRENT_DATE}" \
    "错误: 删除临时备份目录 ${BACKUP_DIR}/${CURRENT_DATE} 失败"

# 删除 10 天前的备份文件
execute_command "find ${BACKUP_DIR}/ -name 'seatble-backup*.tar.gz' -type f -mtime +10 -delete" \
    "成功删除 10 天前的备份文件" \
    "错误: 删除 10 天前的备份文件时出错"

# 执行 rsync 同步
execute_command "rsync -av --no-group --no-perms --exclude='backup_log_*.log' ${BACKUP_DIR}/* ${REMOTE_SERVER} --password-file=${PASSWORD_FILE}" \
    "成功将备份文件同步到远程服务器" \
    "错误: 同步备份文件到远程服务器失败"

log "Seatable 备份脚本执行完毕"

第6步:设置定时任务

crontab -e

# 添加如下内容(每天凌晨1点执行备份):
0 1 * * * /root/backup_to_nas.sh

第7步:添加脚本运行权限

chmod +x /root/backup_to_nas.sh

第8步:测试脚本

检查权限(有x则表示有运行权限)
ls -l /root/backup_to_nas.sh
/root/backup_to_nas.sh

2 个赞