32服务器数据恢复(避坑重点)

扩展安装完成后,即可恢复备份文件,执行以下命令(本地恢复,无需远程连接,避免权限报错):

 
cd D:\pushServer\postgresql\bin
pg_restore -p 5432 -U postgres -d gansueqwin --no-privileges --no-indexes -v D:\gansueqwin_backup.dump

输入postgres密码后,开始自动恢复,恢复过程中会显示“创建CONSTRAINT”“创建INDEX”等日志,无报错即代表恢复正常,这是PostgreSQL数据恢复的核心判断标准。

⚠️ 避坑点1:恢复前必须确保PostGIS扩展已安装,否则会报错“所需的扩展postgis未安装”;

⚠️ 避坑点2:--no-indexes参数可跳过索引错误,避免恢复中断,后续可手动重建索引;

⚠️ 避坑点3:若恢复时提示远程连接失败,去掉命令中的“-h IP”,用本地连接恢复即可。

第九步:索引完整性&安全性检查(确保可用)

数据恢复完成后,需检查索引是否完整、无损坏,尤其是PostGIS空间索引,确保GIS业务正常运行,执行以下4条命令即可全面检查:

 
-- 1. 查看所有索引(确认索引数量,与67服务器一致)
psql -U postgres -d gansueqwin -c "\di"
-- 2. 查看PostGIS空间索引(核心,确保空间查询正常)
psql -U postgres -d gansueqwin -c "SELECT tablename, indexname FROM pg_indexes WHERE indexdef LIKE '%gist%' ORDER BY tablename;"
-- 3. 检查索引有效性(无损坏,确保查询高效)
psql -U postgres -d gansueqwin -c "SELECT relname AS index_name, idx_scan FROM pg_stat_user_indexes ORDER BY relname;"
-- 4. 检查数据库整体健康(确认数据完整,无缺失)
psql -U postgres -d gansueqwin -c "SELECT datname, pg_database_size(datname)/1024/1024 AS 库大小_MB FROM pg_database WHERE datname='gansueqwin';"

✅ 检查标准:所有命令无报错、能看到完整的索引列表、有gist空间索引、数据库有正常大小,且表数量与67服务器一致,即代表索引完整、安全、可用,确保PostGIS空间查询功能正常,这是PostgreSQL数据恢复后的关键验证步骤。

第十步:业务切换&迁移收尾
  1. 修改66服务器Java项目配置:打开66服务器上Java项目的配置文件(application.yml),修改数据库连接地址(只改IP,其他不变):
    spring: datasource: url: jdbc:postgresql://10.62.204.32:5432/gansueqwin username: postgres password: postgres2024

  2. 启动业务并验证:保存配置文件,启动66服务器上的Java项目,打开项目页面,测试地图加载、数据增删改查功能,确认无数据库相关报错,新数据能正常写入32服务器的数据库,完成PostgreSQL跨服务器迁移后的业务切换。

  3. 迁移收尾:

    • 观察24小时:确认66业务正常,32数据库运行稳定,无报错。

    • 备份归档:将67服务器上的备份文件(gansueqwin_backup.dump)归档保存,32服务器的备份文件也留存备用。

    • 旧库清理:67服务器上的gansueqwin库保留3~7天,确认无异常后再删除(避免回滚需求)。

三、常见报错及解决方案(重点收藏,全程避坑)

本次实操过程中遇到的所有报错,整理成解决方案,避免后续踩坑,覆盖部署、迁移、恢复全流程,解决PostgreSQL和PostGIS实操中最常见的报错问题,方便新手和运维人员快速排查:

1. 报错:用户 "postgres" Password 认证失败

原因:忘记postgres密码,或密码输入错误。

解决方案:

  1. 打开PostgreSQL安装目录下的data/pg_hba.conf文件,将“scram-sha-256”改为“trust”;

  2. 重启PostgreSQL服务(Win+R输入services.msc,找到postgresql-x64-12,右键重启);

  3. 无密码登录:psql -U postgres -d gansueqwin;

  4. 重置密码:ALTER USER postgres PASSWORD '新密码';

  5. 将pg_hba.conf改回“scram-sha-256”,重启服务即可。

2. 报错:PostGIS built for PostgreSQL 13 cannot be loaded in PostgreSQL 12

原因:PostGIS版本与PostgreSQL版本不匹配。

解决方案:卸载当前PostGIS,重新下载安装与PostgreSQL版本匹配的PostGIS(本次PostgreSQL 12对应PostGIS 3.4.2 for PG12);迁移场景可直接从原服务器复制对应版本插件。

3. 报错:所需的扩展"postgis"未安装

原因:PostGIS已安装,但未给目标数据库安装扩展,或扩展安装不完整。

解决方案:执行“CREATE EXTENSION postgis;”“CREATE EXTENSION postgis_raster;”,给目标数据库安装扩展,若仍报错,重启PostgreSQL服务后重试。

4. 报错:没有用于主机 "xxx", 用户 "postgres" 的 pg_hba.conf 记录

原因:远程连接权限未开启,或恢复命令使用了远程IP,导致权限校验失败。

解决方案:去掉恢复命令中的“-h IP”,用本地连接恢复(无需修改配置,最简单高效);若需远程连接,修改pg_hba.conf文件,最底部添加一行:host all all 0.0.0.0/0 md5,同时修改postgresql.conf文件,将listen_addresses改为listen_addresses = '*',重启服务即可。

5. 报错:无法删除当前使用的数据库/其他用户正在使用数据库 "gansueqwin"

原因:当前连接在gansueqwin库,或有其他程序(如Navicat)正在连接该库,无法删除。

解决方案:先切换到默认postgres库(\c postgres),执行强制断开连接的SQL(SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'gansueqwin';),踢掉所有关联连接,再执行删除命令。

6. 报错:Navicat连接32服务器超时(10060错误)

报错信息:could not connect to server :Connection timed out (0x0000274C/10060)

原因:32服务器未放行5432端口,或防火墙拦截了连接。

解决方案:32服务器放行5432端口(高级安全Windows防火墙→入站规则→新建端口规则,TCP+5432,允许连接),重启防火墙和PostgreSQL服务。

四、回滚方案(万无一失,应对异常)

若迁移过程中出现异常,需快速恢复原有业务,避免业务中断,步骤如下:

  1. 停止66服务器上的Java项目。

  2. 将项目配置文件中的数据库IP改回67服务器(10.62.210.67)。

  3. 启动66项目,业务立即恢复正常,后续再排查迁移问题(如扩展安装、恢复命令错误等)。

五、最终验证&总结

最终验证结果

  • PostgreSQL 12.17 正常运行,postgres用户可正常登录,权限配置无误;

  • PostGIS 3.4.2 扩展安装成功,空间功能、坐标转换、栅格处理均可用;

  • 跨服务器迁移完成,32服务器gansueqwin数据恢复完整,表、约束、索引全部正常,与67服务器一致;

  • 66业务服务器正常连接32数据库,GIS业务(地图加载、数据查询、增删改查)无异常;

  • 40主力机业务不受影响,继续正常关联67服务器gansueq库,实现数据库拆分隔离。

总结

PostgreSQL+PostGIS部署+迁移+恢复的核心是“版本匹配”和“流程顺序”:先部署基础环境,再安装匹配版本的PostGIS扩展,最后执行备份迁移和数据恢复,全程避开版本不兼容、密码错误、权限不足、索引缺失等常见坑,这是PostgreSQL 12 + PostGIS 3.4.2 实操的核心要点。

本次实操全程无冗余步骤,所有命令可直接复制执行,兼顾了GIS业务部署和跨服务器数据库拆分迁移需求,适合中小企业GIS业务部署、数据迁移、容灾部署等场景,解决PostgreSQL 12部署、PostGIS 3.4.2安装、数据恢复等核心需求。整个流程(含环境部署、插件迁移、数据恢复、问题排查)耗时约30分钟,熟练操作后可缩短至15分钟,新手也能快速上手。

部署完成后,即可将GIS业务系统连接该数据库(主机localhost/服务器IP、端口5432、库名gansueqwin、用户postgres、密码自行设置),正常开展GIS相关业务。相关实操可参考PostgreSQL 12日常备份与维护指南,确保数据库长期稳定运行。

分类: Postgres

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐