达梦数据库恢复数据
从指定备份集恢复数据库
目标:将数据库恢复到备份集 DB_DAMENG_FULL_2025_02_13_01_05_18 对应时间点。
停掉当前 DM8 容器
在宿主机执行:
bash
docker stop dm8 || true
确保数据库处于关闭(脱机)状态。
启动一次性容器进行恢复
在宿主机执行:
bash
cd /mnt/home/dm8/dm-docker
IMAGE=$(docker inspect dm8 --format '{{.Config.Image}}')
docker run --rm -it \
-v /mnt/home/dm8/data:/opt/dmdbms/data \
-v /mnt/home/dm8/db_back:/opt/dmdbms/backup \
--entrypoint /bin/bash \
"$IMAGE"
说明:
--rm:容器退出后自动删除,仅用于本次恢复。- 通过
-v将宿主数据/备份目录挂载到容器内,恢复操作会直接作用于宿主目录。 --entrypoint /bin/bash:覆盖镜像默认 entrypoint,避免自动启动数据库,只获得一个 shell。
在容器中使用 dmrman 执行还原
进入容器后:
bash
cd /opt/dmdbms/bin
./dmrman use_ap=2
进入 dmrman 后,依次执行以下命令(每条一行):
text
CHECK BACKUPSET '/opt/dmdbms/backup/DB_DAMENG_FULL_2025_02_13_01_05_18';
RESTORE DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/DB_DAMENG_FULL_2025_02_13_01_05_18';
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/dmdbms/backup/DB_DAMENG_FULL_2025_02_13_01_05_18';
RECOVER DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
要点:
use_ap=2:不依赖 DMAP 服务,更适合容器场景。CHECK BACKUPSET:校验备份集合法性(推荐执行)。RESTORE:从备份集还原数据文件。RECOVER ... FROM BACKUPSET:从备份集恢复数据库到备份结束状态。RECOVER ... UPDATE DB_MAGIC:更新 DB_MAGIC,确保启动正常。
执行完后,在 dmrman 中退出:
text
EXIT;
回到 bash:
bash
exit
此时一次性容器会被删除,数据已写回宿主 /mnt/home/dm8/data。
启动原来的 dm8 容器
在宿主机:
bash
docker start dm8
如果容器已被删除,可在 compose 目录重新启动:
bash
cd /mnt/home/dm8/dm-docker
docker compose up -d
确保 docker-compose.yml 中挂载仍为:
yaml
volumes:
- /mnt/home/dm8/data:/opt/dmdbms/data
- /mnt/home/dm8/db_back:/opt/dmdbms/backup
验证恢复结果
查看容器日志:
bash
docker logs dm8 --tail 50
使用客户端连接(如 disql 或应用程序),检查关键业务表数据是否符合预期(回退到备份对应时间点)。