注册
在shell中使用disql对数据库进行备份有什么弊端吗?
专栏/技术分享/ 文章详情 /

在shell中使用disql对数据库进行备份有什么弊端吗?

没意思 2025/06/20 133 0 0
摘要
#!/bin/bash

# 达梦环境变量配置
export DM_HOME=/home/dmdba/dmdbms
export PATH=$DM_HOME/bin:$PATH

# 备份目录配置
FULL_BACKUP_DIR=/dmdata/dmbak/full
INCREMENT_BACKUP_DIR=/dmdata/dmbak/increment
LOG_DIR=/dmdata/dmbak/log

# 备份文件时间戳
DATE_STR=$(date +%Y%m%d_%H%M%S)

# 日志文件
LOG_FILE=${LOG_DIR}/backup_${DATE_STR}.log

# 数据库登录信息
USER=sysdba
PASS=Dm123456
HOST=localhost
PORT=5236

# 需要备份的模式列表(请替换为你自己的模式名)
SCHEMAS=("schema1" "schema2" "schema3")

# 删除3天前的备份文件和日志
find $FULL_BACKUP_DIR -type f -mtime +3 -exec rm -f {} \; >> $LOG_FILE 2>&1
find $INCREMENT_BACKUP_DIR -type f -mtime +3 -exec rm -f {} \; >> $LOG_FILE 2>&1
find $LOG_DIR -type f -mtime +3 -exec rm -f {} \; >> $LOG_FILE 2>&1

echo "[INFO] 备份开始,时间:$(date '+%F %T')" | tee -a $LOG_FILE

# 全量备份:循环备份各个模式(schema)
for schema in "${SCHEMAS[@]}"
do
    echo "[INFO] 备份模式 $schema 开始..." | tee -a $LOG_FILE
    disql ${USER}/${PASS}@${HOST}:${PORT} <<EOF >> $LOG_FILE 2>&1
BACKUP SCHEMA $schema BACKUPSET '${FULL_BACKUP_DIR}/schema_${schema}_full_bak_${DATE_STR}';
EXIT;
EOF
    if [ $? -eq 0 ]; then
        echo "[INFO] 备份模式 $schema 完成,时间:$(date '+%F %T')" | tee -a $LOG_FILE
    else
        echo "[ERROR] 备份模式 $schema 失败,请查看日志" | tee -a $LOG_FILE
    fi
done

# 增量备份:针对全库(不指定模式)
echo "[INFO] 开始执行全库增量备份..." | tee -a $LOG_FILE
disql ${USER}/${PASS}@${HOST}:${PORT} <<EOF >> $LOG_FILE 2>&1
BACKUP DATABASE INCREMENT WITH BACKUPDIR '${INCREMENT_BACKUP_DIR}' BACKUPSET '${INCREMENT_BACKUP_DIR}/db_increment_bak_${DATE_STR}';
EXIT;
EOF

if [ $? -eq 0 ]; then
    echo "[INFO] 增量备份完成,时间:$(date '+%F %T')" | tee -a $LOG_FILE
else
    echo "[ERROR] 增量备份失败,请查看日志" | tee -a $LOG_FILE
fi

echo "[INFO] 备份全部完成,时间:$(date '+%F %T')" | tee -a $LOG_FILE

直接执行这个shell就可以进行备份

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服