#######win10定期备份pg数据库#######
注意:该教程只定期备份 单个数据库
1、该备份命令 只备份一个数据库 到 时间格式.backup文件中
2、pg_dump命令备份多个或全部数据库,也是备份到 单一个文件 中
环境
Windows10
Windows--Postgres12版本以上
前提:
1、部署搭建好postgres数据库
步骤
一、创建bat批处理 ,一键备份postgres数据库 ,无需输入密码
文件cron.bat ,内容如下:解析在最后
@ECHO OFF
@setlocal enableextensions
@cd /d "%~dp0"
setlocal
SET PGPASSWORD=888
REM 设置pgpass文件的路径
SET PGPATH=C:\pg\PostgreSQL\12\bin\pg_dump
SET CD=C:\pg\PostgreSQL\12\bin
SET SVPATH=C:\crontab\
SET PRJDB=postgres
SET DBUSR=postgres
SET DBROLE=postgres
FOR /F "TOKENS=1,2,3 DELIMS=/ " %%i IN ('DATE /T') DO SET d=%%i-%%j-%%k
FOR /F "TOKENS=1,2,3 DELIMS=: " %%i IN ('TIME /T') DO SET t=_%%i%%j%%k
SET DBDUMP=%PRJDB%%d%%t%.backup
@ECHO OFF
cd %CD%
%PGPATH% -h 192.168.10.178 -p 5432 -U %DBUSR% --role %DBROLE% -F c -b -v -f %SVPATH%%DBDUMP% %PRJDB%
echo Backup Taken Complete %SVPATH%%DBDUMP%
pause
###########################
二、测试该bat批处理
双击 cron.bat 。执行过程中查看是否需要密码? 无需密码 ,下一步。需要密码网上找教程
查看备份存放目录是否 有刚生成的备份文件
C:\crontab\postgres2023-10-11_1409.backup
有备份文件,证明成功。即可启动Windows计划任务自动备份
三、启动Windows计划任务自动备份
1、Windows下 找到任务计划程序。点击 “创建基本任务...”
2、自定义 计划任务 名称
3、根据该库postgres ,产生的数据量 来进行 每隔多少时间 备份。
4、设置每月最后一天。00:00:00时间备份
5、选中”启动程序”
6、浏览 > 选中脚本cron.bat 打开
7、点击 “完成”
8、点击:计划任务程序库 > 选中”计划任务,即postgres数据库定期备份” > 右击 运行
9、出现以下内容:证明成功开启windows计划任务定期备份postgres数据库
Backup Taken Complete C:\crontab\postgres2023-10-11_1431.backup
注意:该备份命令 只备份一个数据库 到 时间格式.backup文件中
10、可以看到每隔5分钟备份一次。(该库数据量较小)
11、可修改 计划任务
报错1:双击cron.bat时执行成功。但在计划任务中不成功。
可检查以什么方式运行该计划任务。
选中”只在用户登录时运行(R)”
至此,计划任务 完毕!!
#########################################################
以下有备份多个或全部数据库的方法。
还原数据库 方法
#########################################################
一、备份并还原 1个数据库
//在本机上,以postgres用户身份 将postgres数据库 导出 路径C:\name.sql
格式:pg_dump -U postgres用户 -h 本机IP -p 5432 -f 指定导出文件路径C:\name.sql -v postgres数据库
备份:导出备份的文件sql
Cmd命令行 bin目录下
C:\pg\PostgreSQL\12\bin>pg_dump -U postgres -h 192.168.10.178 -p 5432 -f C:\sql\dump001.sql -v postgres
口令:888
还原:导入备份的文件sql
C:\pg\PostgreSQL\12\bin>psql -U postgres -h localhost -p 5432 -d postgres -f E:/dumppostgres.sql
格式:psql -U postgres -h 本机IP -p 5432 -d postgres数据库 -f 指定导入文件路径E:/dumppostgres.sql
二、备份并还原多个数据库
备份多个数据库,可以在命令中指定多个数据库名称,用空格分隔。例如:
C:\pg\PostgreSQL\12\bin>pg_dump -U postgres -h localhost -p 5432 -f E:/dumppostgres.sql -v mydatabase1 mydatabase2
三、备份并还原所有数据库
备份所有数据库,可以使用 --all-databases 参数。例如:
C:\pg\PostgreSQL\12\bin>pg_dump -U postgres -h localhost -p 5432 -f E:/dumppostgres.sql -v --all-databases
###################################################
setlocal
SET PGPASSWORD=888
界面提示密码自动输入
###########################
SET PGPATH=C:\pg\PostgreSQL\12\bin\pg_dump
PGPATH:指定 pg_dump 命令的完整路径
###########################
SET CD=C:\pg\PostgreSQL\12\bin
CD:指定切换到bin目录下,以便执行备份命令
###########################
SET SVPATH=C:\crontab\
SVPATH:指定备份文件保存的目录路径
###########################
SET PRJDB=postgres
PRJDB:指定要备份的数据库名
###########################
SET DBUSR=postgres
DBUSR:指定连接数据库所使用的用户名
###########################
SET DBROLE=postgres
DBROLE:指定要备份的数据库角色
###########################
FOR /F "TOKENS=1,2,3 DELIMS=/ " %%i IN ('DATE /T') DO SET d=%%i-%%j-%%k
FOR /F "TOKENS=1,2,3 DELIMS=: " %%i IN ('TIME /T') DO SET t=_%%i%%j%%k
这段代码是一个批处理脚本,用于获取当前日期和时间,并将其解析为指定的格式。下面是对代码进行解析的说明:
第一行代码:将解析后的日期存储到量d中
FOR /F 是一个循环命令,用于遍历指定命令的输出结果。
"TOKENS=1,2,3 DELIMS=/ " 是用于指定解析的格式和分隔符。这里将日期按照 / 和空格进行分隔,并将分隔后的部分分别存储到 %%i、%%j 和 %%k 中。
IN ('DATE /T') 是指定要执行的命令。DATE /T 用于获取当前日期并以短格式显示。
DO SET d=%%i-%%j-%%k 是在循环中执行的操作,将解析后的日期存储到变量 d 中。
第二行代码:将解析后的时间存储到量t中
###########################
SET DBDUMP=%PRJDB%%d%%t%.backup
DBDUMP:指定以时间格式的文件。
###########################
@ECHO OFF
cd %CD%
%PGPATH% -h 192.168.10.178 -p 5432 -U %DBUSR% --role %DBROLE% -F c -b -v -f %SVPATH%%DBDUMP% %PRJDB%
简解:cmd命令行切换到bin目录下,执行命令。
############################
echo Backup Taken Complete %SVPATH%%DBDUMP%
Pause
用于打印备份完成的信息和路径,并暂停脚本的执行。下面是
echo Backup Taken Complete %SVPATH%%DBDUMP%: echo 用于在命令行中输出文本。作用是输出一个备份完成的提示信息,其中 %SVPATH% 和 %DBDUMP% 是变量,表示备份路径的一部分。
pause: pause 命令用于暂停批处理脚本的执行,等待用户按下任意键继续执行。作用是在备份完成后暂停脚本的执行,以便用户可以查看备份结果或进行其他操作
#############################################################