一介闲人
一介闲人
在随便什么地方创建sh文件,最好在统一 一个地方
我这里以( /dmdata/dmbak/dm_back.sh )为例
#!/bin/bash
# 配置参数
export DM_HOME="/home/dmdba/dmdbms" # 达梦安装目录,有bin目录的那个
BAK_DIR="/dmdata/dmbak/dmback" # 备份存储目录
USER="SYSDBA" # 数据库用户名
PASSWORD="Dm123456" # 密码(需修改)
PORT="5237" # 数据库端口
SCHEMA="DM8" # 需备份的模式名
RETENTION_DAYS=30 # 备份保留天数
# 创建备份目录
mkdir -p ${BAK_DIR} || exit 1
# 设置环境变量
export PATH=${DM_HOME}/bin:${PATH}
export LD_LIBRARY_PATH=${DM_HOME}/bin:${LD_LIBRARY_PATH}
# 生成带时间戳的文件名
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
DMP_FILE="${SCHEMA}_${TIMESTAMP}.dmp"
LOG_FILE="${SCHEMA}_${TIMESTAMP}.log"
TAR_FILE="${BAK_DIR}/${SCHEMA}_${TIMESTAMP}.tar.gz"
# 执行逻辑备份(按模式导出)
${DM_HOME}/bin/dexp USERID=${USER}/${PASSWORD}@localhost:${PORT} \
DIRECTORY=${BAK_DIR} \
FILE=${DMP_FILE} \
LOG=${LOG_FILE} \
SCHEMAS=${SCHEMA} \
COMPRESS=Y
# 压缩备份文件
tar -czf ${TAR_FILE} -C ${BAK_DIR} ${DMP_FILE} ${LOG_FILE} && \
rm -f ${BAK_DIR}/${DMP_FILE} ${BAK_DIR}/${LOG_FILE}
# 清理旧备份(保留30天)
find ${BAK_DIR} -name "${SCHEMA}_*.tar.gz" -mtime +${RETENTION_DAYS} -exec rm -f {} \;
echo "[$(date)] 备份完成: ${TAR_FILE}" >> ${BAK_DIR}/backup.log
# 休眠60秒
sleep 60
# 重启数据库,释放内存
ps -ef|grep DMTEST >> ${BAK_DIR}/backup.log
systemctl restart DmServiceDMTEST.service
ps -ef|grep DMTEST >> ${BAK_DIR}/backup.log
echo "[$(date)] 数据库重启完成" >> ${BAK_DIR}/backup.log
授权执行权限
chmod u+x /dmdata/dmbak/dm_back.sh
手动执行
sh /dmdata/dmbak/dm_back.sh
检查 crond 服务状态(确保定时任务服务正常运行)
# 查看crond服务状态
sudo systemctl status crond
# 若未启动,执行以下命令启动
sudo systemctl start crond
# 设置开机自启
sudo systemctl enable crond
编辑定时任务,设置每天0点5分执行
crontab -e
# 添加以下内容
5 0 * * * /dmdata/dmbak/dm_back.sh
#若使用 vim 编辑,按 Esc 后输入 :wq 保存退出
验证定时任务
crontab -l
#若能看到刚才添加的规则,说明任务已生效
等待第天查看备份结果,查看backup.log文件
转载自 CSDN-二当家的素材网
评论