在统信uos中实现达梦数据库周期性自动备份需配置cron或systemd timer调度脚本,脚本含逻辑导出、时间戳命名、日志记录、压缩归档及7天旧备份清理,并须验证备份完整性与可恢复性。

如果您需要在统信UOS系统中实现数据库或文件的周期性自动备份,则需依赖cron守护进程调度执行预定义脚本。以下是设置Cron定时备份的具体操作步骤:
一、编写数据库备份脚本
该脚本封装达梦数据库逻辑导出命令,支持时间戳命名与日志记录,确保每次备份文件唯一可追溯。
1、创建脚本文件:sudo nano /usr/local/bin/dm_backup.sh
2、写入以下内容(请按实际用户名、密码、路径替换):
#!/bin/bash
cd /data/dmdbms/bin
./dexp USERID=SYSDBA/SYSDBA@localhost:5236 FILE=dm_backup_$(date +%Y%m%d_%H%M%S).dmp DIRECTORY=/backup/dm LOG=dm_backup_$(date +%Y%m%d_%H%M%S).log owner=SYSDBA
3、赋予执行权限:sudo chmod +x /usr/local/bin/dm_backup.sh
4、手动执行一次验证:sudo /usr/local/bin/dm_backup.sh,确认/backup/dm目录下生成.dmp与.log文件
二、配置用户级Cron任务
使用普通用户或root账户的crontab可避免权限冲突,适用于达梦数据库服务以root或dmdba身份运行的常见部署场景。
1、编辑当前用户定时任务:crontab -e
2、添加一行(示例为每日凌晨1点执行):0 1 * * * /usr/local/bin/dm_backup.sh
3、保存退出后,查看当前任务列表:crontab -l
4、检查cron服务状态:sudo systemctl status cron,若未运行则执行sudo systemctl start cron
三、配置系统级定时任务(systemd timer)
该方式绕过传统cron,利用systemd原生机制实现更精确的启动控制与日志追踪,适合对可靠性要求更高的生产环境。
1、创建备份服务单元文件:sudo nano /etc/systemd/system/dm-backup.service
2、写入以下内容:
[Unit]
Description=DM Database Backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/dm_backup.sh
User=root
RemainAfterExit=yes
3、创建对应timer单元:sudo nano /etc/systemd/system/dm-backup.timer
4、写入以下内容:
[Unit]
Description=Run DM Backup Daily
[Timer]
OnCalendar=*-*-* 01:00:00
Persistent=true
[Install]
WantedBy=timers.target
5、启用并启动timer:sudo systemctl daemon-reload && sudo systemctl enable --now dm-backup.timer
6、查看timer状态:systemctl list-timers | grep dm-backup
四、添加压缩与旧备份清理逻辑
在备份脚本中集成压缩与自动清理,可有效控制存储占用,避免磁盘空间耗尽。
1、修改/usr/local/bin/dm_backup.sh,在dexp命令后追加:
cd /backup/dm
zip -m dm_backup_$(date +%Y%m%d_%H%M%S).zip *.dmp *.log
find /backup/dm -name "*.zip" -mtime +7 -delete
2、确认zip工具已安装:sudo apt install zip -y
3、再次测试脚本执行:sudo /usr/local/bin/dm_backup.sh
4、检查/backup/dm目录是否仅保留近7天的.zip文件,且无残留.dmp/.log
五、验证备份完整性与恢复路径
仅生成备份文件不足以保障数据安全,必须验证其可恢复性,确保备份内容结构完整、无截断或权限错误。
1、从最新.dmp文件提取表结构信息:head -n 50 /backup/dm/dm_backup_*.dmp | grep -E "(CREATE|INSERT)"
2、检查文件大小是否大于1MB:ls -lh /backup/dm/dm_backup_*.dmp
3、模拟导入前校验(不实际执行):/data/dmdbms/bin/dimp SYSDBA/SYSDBA@localhost:5236 FILE=/backup/dm/dm_backup_*.dmp LOG=/tmp/dm_verify.log test=yes
4、查看校验日志是否含“successfully completed”字样:grep "completed" /tmp/dm_verify.log










