因postgresql(以下简称pg)主要运行于 Linux系统,官网上参考资料及使用案例也大多是Linux系统下的,Windows 环境下有关数据库维护尤其是增量备份方面的参考资料比较少,这些都给Windows系统的pg管理员造成困扰,本文通过 Step by step 的方式,实现windows 环境下pg的增量备份与恢复,希望对大家有所帮助。
1) net user postgres password /add 说明:设置postgres的密码,最好与pg的超级用户postgres相同。 2) net localgroup Users postgres /add 3) 新建备份文件夹 md C:\backup 4) 修改backup的权限,赋予Users组完全控制权,并保持权限继承 5) 新建子目录 C:\backup\base_files 、C:\backup\wal_files
1) 以管理员运行CMD(win+R),并切换当前目录到C:\PostgreSQL\12,修改pg_env.bat文件(运行环境设置批处理脚本),通过文本编辑器打开,去除path路径环境变量值的双引号即可。 2) 如pg服务器正在运行,则停止pg服务,通过执行 pg_ctl stop ,也可以通过 服务==》停止postgresql。
1) host all all 0.0.0.0/0 md5 2) host replication all 0.0.0.0/0 md5
1) isten_addresses = '*' 2) wal_level = replica 3) archive_mode = on 4) archive_command = 'copy /V "%p" C:\\backup\\wal_files\\%f ' 注意写法,这里有大坑 5) restore_command = 'copy c:\\backup\\wal_files\\%f "%p" ' 6) recovery_target_time = '2021-09-03 11:26:33.258335+08' //根据恢复的时间点改写 7) recovery_target_inclusive = false
有两种方式建立pg的基础备份,一是在pg停止服务的状态下,以管理员方式,把pg data文件夹下的所有内容拷贝到 C:\backup\base_files,下面论述第二种方式:
1) Win+R ==> cmd ==>cd C:\PostgreSQL\12 2) 运行设置环境变量的脚本文件Pg_env.bat 3) Pc_ctl.exe start //启动数据库
1) pg_basebackup.exe -D C:\backup\base_files -Fp -P -v -U postgres 2)
1) select current_timestamp; 2) 2021-09-03 11:26:33.258335+08
1) insert into foo select generate_series(1000001,1500000); 2) select current_timestamp; 3) 2021-09-03 14:54:34.893993+08
假如某个时刻,数据库出现故障,恢复pg的过程如下
1) 创建数据库集簇文件夹 data,并赋予 Users组完全控制权限 2) 在pg_env.bat 环境下,initdb -U postgres -W
1) C:\PostgreSQL\12\bin \pg_ctl.exe runservice -N postgresql-x64-12 -D C:\PostgreSQL\12\data -w
1) C:\PostgreSQL\12\bin \pg_ctl.exe unregister -N postgresql-x64-12
1) Win键+R,输入 runas /user:postgres cmd