注册
达梦数据库异地备份(Linux脚本)
技术分享/ 文章详情 /

达梦数据库异地备份(Linux脚本)

醉酒方知浓 2026/04/03 20 0 0

1、先做免密登录

在 A 服务器 执行:
ssh-keygen -t
# 一路按回车
ssh-copy-id root@B服务器IP

测试免密:

ssh root@B服务器IP 

不用输密码就是成功了。

2、在A服务器创建自动同步脚本

命名为sync_db_dameng.sh

#!/bin/bash
# 配置项(请根据实际情况修改)
SOURCE_BASE_DIR="/dm8/dmdata/DAMENG/bak/"  # A服务器存放DB_DAMENG文件夹的上级目录
REMOTE_USER="root"                 # B服务器登录用户
REMOTE_HOST="192.168.1.100"        # B服务器IP/域名
REMOTE_DIR="/dm8/bak"       # B服务器接收文件夹的目录
LOG_FILE="/dm8/scp_log/db_dameng_sync.log"  #日志存放位置(A服务器)

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

# 第一步:检查源目录是否存在
if [ ! -d "$SOURCE_BASE_DIR" ]; then
    log "错误:源目录 $SOURCE_BASE_DIR 不存在"
    exit 1
fi

# 第二步:查找当天生成的DB_DAMENG开头的文件夹
# 仅匹配当天创建的文件夹(麒麟V10的find命令兼容此参数)
TARGET_DIR=$(find "$SOURCE_BASE_DIR" -maxdepth 1 -type d -name "DB_DAMENG*" -ctime 0)

if [ -z "$TARGET_DIR" ]; then
    log "提示:未找到当天生成的DB_DAMENG开头文件夹"
    exit 0
fi

# 第三步:执行SCP同步(递归+保留权限/时间戳)
log "开始同步文件夹:$TARGET_DIR 到 $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
scp -r -p "$TARGET_DIR" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}"

# 第四步:检查同步结果
if [ $? -eq 0 ]; then
    log "成功:文件夹 $TARGET_DIR 同步完成"
else
    log "失败:文件夹 $TARGET_DIR 同步失败"
    exit 1
fi

exit 0

3、添加执行权限

chmod +x /dm8/sync_db_dameng.sh # 替换为脚本实际存放路径

4、测试脚本

/dm8/sync_db_dameng.sh  #执行脚本

执行后查看日志cat  /dm8/scp_log/db_dameng_sync.log
5、设置定时任务

crontab -e

0 3 * * * /dm8/sync_db_dameng.sh  #替换为脚本实际路径

6、在B服务器设置自动删除脚本
命名为 delete_old_db_folder.sh

#!/bin/bash
REMOTE_DIR="/dm8/bak"  # B服务器接收迁移文件夹的目录(与同步脚本一致)
LOG_FILE="/dm8/scp_log/delete_db_folder.log"
RETAIN_DAYS=14  # 保留最近7天的文件夹,删除7天前的

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

# 检查目标目录是否存在
if [ ! -d "$REMOTE_DIR" ]; then
    log "错误:目标目录 $REMOTE_DIR 不存在"
    exit 1
fi

# 执行删除(仅删除DB_DAMENG开头、7天前的文件夹)
log "开始删除 $REMOTE_DIR 下7天前的DB_DAMENG开头文件夹"
find "$REMOTE_DIR" -maxdepth 1 -type d -name "DB_DAMENG*" -mtime +$RETAIN_DAYS -exec rm -rf {} \;

if [ $? -eq 0 ]; then
    log "删除完成:已清理7天前的DB_DAMENG文件夹"
else
    log "删除失败:部分文件夹可能正在被占用,请手动检查"
fi

exit 0

7、给删除脚本添加执行权限

chmod +x /dm8/delete_old_db_folder.sh

8、配置 crontab 定时任务

crontab -e

0 4 * * * /dm8/delete_old_db_folder.sh
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服