Files
ragflow_python/asr-monitor-test/db_backup.sh

87 lines
2.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 腾讯云数据库同步脚本 (适配CynosDB)
# 安全增强版 - 支持SSL连接和错误处理
# 配置参数
LOCAL_DB="rag_flow"
CLOUD_DB="rag_flow"
BACKUP_DIR="./bk"
LOG_FILE="./bk/db/db_sync.log"
DATE=$(date +%Y%m%d%H%M)
# 腾讯云数据库信息
CLOUD_HOST="gz-cynosdbmysql-grp-0vwlm22l.sql.tencentcdb.com"
CLOUD_PORT="25317"
CLOUD_USER="cyx" # 替换为实际用户名
# 创建备份目录
mkdir -p $BACKUP_DIR
# 1. 获取本地数据库密码
LOCAL_PASS=$(docker exec ragflow-mysql printenv MYSQL_ROOT_PASSWORD)
if [ -z "$LOCAL_PASS" ]; then
echo "[ERROR] $(date) 无法获取本地数据库密码" >> $LOG_FILE
exit 1
fi
# 2. 从容器导出数据库
echo "开始导出数据库!!!!"
# 修改后的导出命令
docker exec ragflow-mysql sh -c \
"mysqldump -u root -p'$LOCAL_PASS' \
--single-transaction \
--routines \
--triggers \
--hex-blob \
--set-gtid-purged=OFF \
$LOCAL_DB" | \
sed -e 's/utf8mb4_0900_ai_ci/utf8mb4_general_ci/g' \
-e "s/ NOT NULL DEFAULT (uuid()) COMMENT '订阅ID'/ NOT NULL COMMENT '订阅ID'/" \
> $BACKUP_DIR/dump_$DATE.sql
# 检查导出结果
if [ $? -ne 0 ] || [ ! -s $BACKUP_DIR/dump_$DATE.sql ]; then
echo "[ERROR] $(date) 数据库导出失败" >> $LOG_FILE
exit 1
fi
echo "导出数据库结束!!!!"
# 3. 压缩备份
gzip $BACKUP_DIR/dump_$DATE.sql
BACKUP_SIZE=$(du -h $BACKUP_DIR/dump_$DATE.sql.gz | awk '{print $1}')
# 4. 从安全存储获取云数据库密码 (推荐方式)
# 使用密码管理器或在安全位置存储密码
CLOUD_PASS=$(cat ./bk/db/cloud_db_password.txt) # 替换为实际密码获取方式
# 5. 同步到腾讯云数据库 (强制SSL)
echo "同步到腾讯云数据库$CLOUD_HOST $CLOUD_PORT $CLOUD_USER $CLOUD_PASS $CLOUD_DB"
zcat $BACKUP_DIR/dump_$DATE.sql.gz | \
mysql -h $CLOUD_HOST -P $CLOUD_PORT -u $CLOUD_USER -p"$CLOUD_PASS" \
$CLOUD_DB
# 6. 错误处理
if [ $? -eq 0 ]; then
echo "[SUCCESS] $(date) 同步成功 | 大小: $BACKUP_SIZE" >> $LOG_FILE
else
ERROR_CODE=$?
echo "[ERROR] $(date) 同步失败! 错误码: $ERROR_CODE" >> $LOG_FILE
# 保留失败备份用于调试
mv $BACKUP_DIR/dump_$DATE.sql.gz $BACKUP_DIR/failed_dump_$DATE.sql.gz
# 添加详细错误信息
echo "[DEBUG] 错误详情: 可能原因 -" >> $LOG_FILE
case $ERROR_CODE in
1) echo "通用错误" >> $LOG_FILE ;;
2) echo "SQL语法错误" >> $LOG_FILE ;;
1045) echo "访问被拒绝 (用户/密码错误)" >> $LOG_FILE ;;
2003) echo "无法连接到数据库服务器" >> $LOG_FILE ;;
2026) echo "SSL连接问题" >> $LOG_FILE ;;
*) echo "未知错误" >> $LOG_FILE ;;
esac
fi
# 7. 清理旧备份保留7天
find $BACKUP_DIR -name "dump_*.gz" -mtime +7 -delete