You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下如何将PostgreSQL 14.1的实时数据库目录原子同步至多个本地磁盘

Windows 10下如何将PostgreSQL 14.1的实时数据库目录原子同步至多个本地磁盘

我完全懂你的痛点:要把正在运行的PostgreSQL数据目录实时、一致地镜像到多块本地磁盘,不想装额外软件,还得保证镜像能直接用来恢复——毕竟定时Robocopy会有数据丢失窗口,直接复制运行中的PG文件又会损坏数据。结合Windows 10 Pro自带的工具,给你一套可行的方案:

核心思路:用VSS快照+Robocopy+任务计划实现准实时一致同步

PostgreSQL 10+支持Windows的卷影复制服务(VSS),能在不停止服务的情况下创建数据目录的一致快照。我们可以用命令行版的VSS工具diskshadow生成快照,再用robocopy从快照同步到目标磁盘,最后用任务计划高频触发这个流程,把数据丢失窗口压缩到最小。

步骤1:编写VSS快照脚本

创建两个文本文件,放在同一个目录下(比如C:\PGSyncScripts):

1.1 创建快照脚本 create_snapshot.dsh

set context persistent
add volume C: alias PGVol
create
expose %PGVol% P:

这个脚本会给C盘创建一个持久化快照,并把快照挂载为P:盘(如果P盘被占用,换成其他闲置盘符即可)。

1.2 清理快照脚本 cleanup_snapshot.dsh

delete shadows volume C:
unexpose P:

用来同步完成后删除快照、释放挂载盘符。

步骤2:编写同步批处理脚本

创建SyncPGDB.bat,同样放在C:\PGSyncScripts目录:

@echo off
setlocal enabledelayedexpansion

:: 定义路径(根据你的实际情况修改)
set SOURCE_PATH=P:\whatever\PGDB
set TARGET_D=D:\mirror\PGDB
set TARGET_E=E:\mirror\PGDB
set TARGET_F=F:\mirror\PGDB
set SCRIPT_DIR=C:\PGSyncScripts

echo 开始创建VSS快照...
diskshadow /s "%SCRIPT_DIR%\create_snapshot.dsh"
if errorlevel 1 (
    echo 创建快照失败!
    goto cleanup_and_exit
)

echo 同步到D盘...
robocopy "%SOURCE_PATH%" "%TARGET_D%" /MIR /COPYALL /R:0 /W:0 /NP
:: Robocopy返回值0-7是成功,8及以上是错误
if errorlevel 8 (
    echo D盘同步失败!
    goto cleanup_and_exit
)

echo 同步到E盘...
robocopy "%SOURCE_PATH%" "%TARGET_E%" /MIR /COPYALL /R:0 /W:0 /NP
if errorlevel 8 (
    echo E盘同步失败!
    goto cleanup_and_exit
)

echo 同步到F盘...
robocopy "%SOURCE_PATH%" "%TARGET_F%" /MIR /COPYALL /R:0 /W:0 /NP
if errorlevel 8 (
    echo F盘同步失败!
    goto cleanup_and_exit
)

echo 所有磁盘同步完成!
goto cleanup_and_exit

:cleanup_and_exit
echo 清理VSS快照...
diskshadow /s "%SCRIPT_DIR%\cleanup_snapshot.dsh"
endlocal
exit /b
  • /MIR:镜像模式,会删除目标目录中源目录没有的文件,保持完全一致
  • /COPYALL:复制所有文件属性(权限、时间戳等),保证镜像和源目录完全一致
  • /R:0 /W:0:遇到错误不重试、不等待,适合批量自动化执行

步骤3:用任务计划程序实现高频触发

  1. 打开「任务计划程序」,点击「创建任务」
  2. 常规标签:勾选「使用最高权限运行」(VSS需要管理员权限),设置任务名称比如「PGDB实时同步」
  3. 触发器标签:点击「新建」,选择「每天」,设置重复间隔为1分钟,持续时间「24小时」,这样每分钟执行一次同步
  4. 操作标签:点击「新建」,操作选择「启动程序」,程序或脚本选择你的SyncPGDB.bat路径
  5. 设置标签:勾选「如果任务运行时间超过X小时就停止」(比如2小时),勾选「如果任务失败,每隔X分钟重试」(比如5分钟)

关键注意事项

  • 验证VSS Writer:打开命令提示符(管理员),运行vssadmin list writers,找到「PostgreSQL Writer」,确保状态是「稳定」,如果没有,检查PostgreSQL服务是否正常运行
  • 盘符冲突:如果P:被占用,修改两个.dsh脚本里的盘符为其他闲置字母
  • 磁盘空间:确保D/E/F盘有足够空间容纳PG数据目录,Robocopy会在空间不足时报错
  • 恢复测试:定期测试恢复流程——停止PostgreSQL服务,把镜像目录复制回C盘的原路径,启动服务,确认数据库能正常运行

这样一套下来,用的全是Windows 10 Pro自带工具,不需要额外软件,而且每次同步的都是一致的快照,镜像目录可以直接用来恢复,数据丢失窗口最多1分钟,比每日备份靠谱多了。

备注:内容来源于stack exchange,提问作者Kabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:02:38