PostgreSQL数据库自动备份与恢复问题(Windows定时及报错处理)
PostgreSQL 自动备份与恢复解决方案
一、解决备份命令报错问题
你遇到的pg_dump: error: too many command-line arguments (first is "-s")报错,是因为参数使用错误:
-s是仅备份数据库架构的参数,但你需要同时备份架构与数据,直接移除该参数即可(pg_dump默认会备份架构+数据)。- 修正后的备份命令如下:
F: cd F:\softwares\postgresql-12.1-3-windows-x64-binaries\pgsql\bin pg_dump.exe -U postgres fuelman > E:\fuel_man_prod_backup\prod.sql
额外优化点:
- 如果需要避免密码交互,可在脚本中添加环境变量设置:
set PGPASSWORD=你的postgres用户密码
- 确保备份目录
E:\fuel_man_prod_backup已存在,pg_dump不会自动创建目录。
二、Windows 自动备份(类 Cron 定时触发)
1. 编写定时备份脚本
创建backup_fuelman.bat文件,内容如下:
@echo off :: 配置参数 set BACKUP_DIR=E:\fuel_man_prod_backup set PG_BIN_DIR=F:\softwares\postgresql-12.1-3-windows-x64-binaries\pgsql\bin set DB_NAME=fuelman set DB_USER=postgres set DB_PASS=你的postgres用户密码 :: 创建备份目录(不存在则创建) if not exist %BACKUP_DIR% mkdir %BACKUP_DIR% :: 生成时间戳,避免备份文件覆盖 set TIMESTAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% set TIMESTAMP=%TIMESTAMP: =0% :: 执行备份 set PGPASSWORD=%DB_PASS% %PG_BIN_DIR%\pg_dump.exe -U %DB_USER% %DB_NAME% > %BACKUP_DIR%\fuelman_backup_%TIMESTAMP%.sql :: 可选:自动删除7天前的旧备份 forfiles /p %BACKUP_DIR% /s /m *.sql /d -7 /c "cmd /c del @path" echo 备份完成,文件路径:%BACKUP_DIR%\fuelman_backup_%TIMESTAMP%.sql
2. 设置 Windows 任务计划
- 打开「任务计划程序」,点击「创建基本任务」:
- 任务名称:
PostgreSQL fuelman 自动备份 - 触发器:设置执行频率(例如每天凌晨2点)
- 操作:选择「启动程序」,选中刚才编写的
backup_fuelman.bat - 确认任务权限:确保运行任务的用户有权限访问 PostgreSQL 服务和备份目录
- 任务名称:
三、按需恢复操作
1. 准备工作
- 停止所有访问目标数据库的应用程序,避免数据冲突
- 若恢复到新数据库,先创建空数据库:
F: cd F:\softwares\postgresql-12.1-3-windows-x64-binaries\pgsql\bin set PGPASSWORD=你的postgres用户密码 createdb.exe -U postgres -O postgres new_fuelman
2. 执行恢复命令
F: cd F:\softwares\postgresql-12.1-3-windows-x64-binaries\pgsql\bin set PGPASSWORD=你的postgres用户密码 psql.exe -U postgres -d new_fuelman -f E:\fuel_man_prod_backup\fuelman_backup_xxxxxx_xxxxxx.sql
注意:将
fuelman_backup_xxxxxx_xxxxxx.sql替换为实际的备份文件名
3. 恢复到原数据库(谨慎操作)
若需覆盖原数据库,先删除原库再重建恢复:
F: cd F:\softwares\postgresql-12.1-3-windows-x64-binaries\pgsql\bin set PGPASSWORD=你的postgres用户密码 dropdb.exe -U postgres fuelman createdb.exe -U postgres -O postgres fuelman psql.exe -U postgres -d fuelman -f 备份文件路径.sql
内容的提问来源于stack exchange,提问作者pappu_kutty
相关产品推荐
相关产品推荐

