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