tencent cloud

云数据库 PostgreSQL

动态与公告
产品动态
产品简介
产品概述
产品特性
产品优势
应用场景
信息安全说明
地域和可用区
产品功能列表
大版本生命周期说明
MSSQL 兼容版
产品计费
计费概述
实例类型与规格
购买方式
退费说明
欠费说明
备份空间收费说明
快速入门
创建 PostgreSQL 实例
连接 PostgreSQL 实例
管理 PostgreSQL 实例
数据导入
通过 DTS 迁移数据
内核能力介绍
内核版本概述
内核版本更新动态
查看内核版本
自研内核功能介绍
数据库审计
审计服务说明
开通审计服务
查看审计日志
修改审计服务
审计性能说明
用户指南
实例管理
升级实例
CPU 弹性扩容
只读实例
账号管理
数据库管理
参数管理
日志管理及分析
备份与恢复
数据迁移
插件管理
网络管理
访问管理
数据安全
租户及资源隔离
安全组
监控与告警
标签
AI 实践
使用 tencentdb_ai 插件调用大模型
使用 tencentdb_ai 插件构建 AI 应用
结合 Supabase 快速构建基于云数据库 PostgreSQL 的后端服务
实践教程
跨库访问
如何在 PostgreSQL 中自动创建分区
基于 pg_roaringbitmap 实现超大规模标签查找
一条 SQL 实现查询附近的人
如何配置云数据库 PostgreSQL 作为 GitLab 外部数据源
通过 cos_fdw 插件支持分级存储能力
通过 pgpool 实现读写分离
通过 auto_explain 插件实现慢 SQL 分析
使用 pglogical 进行逻辑复制
使用 Debezium 采集 PostgreSQL 数据
在 CVM 本地搭建 PostgreSQL 异地灾备环境
只读实例与只读组实践教程
如何使用云函数定时操作数据库
表膨胀处理
性能白皮书
测试方法
测试结果
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Read-only Replica APIs
Backup and Recovery APIs
Parameter Management APIs
Security Group APIs
Performance Optimization APIs
Account APIs
Specification APIs
Network APIs
Data Types
Error Codes
常见问题
相关协议
Service Level Agreement
Terms of Service
词汇表
联系我们
文档云数据库 PostgreSQL实践教程在 CVM 本地搭建 PostgreSQL 异地灾备环境

在 CVM 本地搭建 PostgreSQL 异地灾备环境

PDF
聚焦模式
字号
最后更新时间: 2026-02-03 11:09:11

背景

为保证业务正常运行,一个高可用的数据库架构是不可或缺的。数据库一旦出现丢失、不可用等问题,将会造成重大影响和经济损失。通过主备架构,当主数据库因突发硬件故障而无法工作时,备用数据库可立即接管服务,保证数据库服务能够正常提供。而在 CVM 自建 PostgreSQL 灾备环境,则能够将云上数据同步至本地,提高对不可抗力的应对能力。
本文主要介绍如何搭建云数据库 PostgreSQL 为主数据库,云服务器 CVM 自建 PostgreSQL 为备数据库的主备环境。

前置条件

云服务器 CVM 中必须安装与云数据库相同版本的 PostgreSQL 数据库,详细安装教程请参考 PostgreSQL 官方文档。Linux 系统的云服务器配置请参见 快速配置 Linux 云服务器。示例使用 PostgreSQL 14 版本。
注意:
本方法需要用到 pg_basebackup 工具,两个工具均仅支持13及以上的 PostgreSQL 版本。

步骤1: 将云数据库主库数据物理备份到 CVM 本地备库

1. 使用 root 账号登录云服务器 CVM ,执行以下命令安装中文字符集。
1.1. 若您的 CVM 系统为 Debian/Ubuntu ,请使用 root 权限使用以下命令:
[root@VM-10-18-tencentos ~]# sudo locale-gen zh_CN.UTF-8
1.2. 若您的 CVM 系统为 CentOS/TencentOS ,请使用 root 权限执行以下命令进入配置文件内容:
[root@VM-10-17-tencentos ~]# vi /etc/locale.conf
按 i 键进入编辑模式,将文件内容修改为:
LANG="zh_CN.UTF-8"
按 esc 键退出编辑模式,再直接输入 :wq 保存修改并退出。退出后,执行以下命令使配置生效:
[root@VM-10-17-tencentos ~]# source /etc/locale.conf
1.3. 安装完毕,您可通过以下命令查看字符集是否安装成功:
[root@VM-10-17-tencentos ~]# locale -a | grep zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
若返回信息前缀为 zh ,则安装成功。
2. 创建普通权限用户。若您的本地数据库中已经存在普通权限用户,可跳过本步骤。
注意:
创建备份数据目录时,必须使用普通权限用户。PostgreSQL 出于安全考虑,启动命令 pg_ctl 不允许以 root 或 postgres 超级用户身份运行。
使用以下命令完成创建普通用户 pgsql 。
[root@VM-10-6-tencentos pgsql]# useradd -r -s /bin/bash pgsql
3. 通过重命名目录,将当前云服务器中的数据目录进行备份。
系统默认数据目录为 /usr/local/pgsql/data ,您可根据实际情况修改命令。
执行以下命令,使用普通用户 pgsql ,停止当前 PostgreSQL 服务运行:
[root@VM-10-17-tencentos ~]# su - pgsql #使用普通用户 pgsql 登录本地数据库
[pgsql@VM-10-17-tencentos ~]$ cd /usr/local/pgsql/data
[pgsql@VM-10-17-tencentos data]$ /usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/data
waiting for server to shut down.... done
server stopped
执行以下命令,重命名数据目录,将其作为备份。示例备份目录名为 data-bak-2025 ,可根据实际情况修改。
[pgsql@VM-10-6-tencentos postgresql-14.2]# mv /usr/local/pgsql/data /usr/local/pgsql/data-bak-2025
重新新建一个数据目录 /usr/local/pgsql/data 作为数据库存放数据的目录。将新的数据库目录权限修改为700 ,即仅限目录所有者拥有读、写和执行权限,其他用户无操作权限:
[pgsql@VM-10-6-tencentos postgresql-14.2]# cd /usr/local/pgsql
[pgsql@VM-10-6-tencentos pgsql]# mkdir data
[pgsql@VM-10-6-tencentos pgsql]# chmod 700 data
4. 执行以下命令,使用 pg_basebackup 工具在线备份主库数据。
其中,-h 参数后需填写云数据库的 IP 地址,-U 参数后需填写连接数据库的账号,此处为 dbadmin 。若云数据库与云服务器处于同一 VPC 下,则建议填写云数据库的内网 IP 地址。
[pgsql@VM-10-6-tencentos pgsql]# exit
[root@VM-10-6-tencentos pgsql]# date && /usr/local/pgsql/bin/pg_basebackup -R -Xs -D /usr/local/pgsql/data -h *.*.*.* -p 5432 --verbose -P -U dbadmin && date
Password:
提示 Password: ,输入连接数据库账号的密码,按回车键即可。
最终显示信息 pg_basebackup: base backup completed 则代表物理备份成功。

步骤2: 修改配置文件,添加主备链路

1. 执行以下命令,进入 postgresql.conf 配置文件中。
[root@VM-10-6-tencentos pgsql]# vi /usr/local/pgsql/data/postgresql.conf
按 i 键进入编辑模式,找到以下内容,在每行的行首添加英文字符 # 将其注释掉。
synchronous_standby_names
extension_blacklist
tencentdb_enable_copy_to
tencentdb_relcache_evict_num
tencentdb_relcache_max_num
soft_limit_connections
shared_preload_libraries
tencentdb_syscache_max_num
basebackup_exclude_paths
tencentdb_syscache_evict_num
tencentdb_enable_trusted_extension
tencentdb_az_five
disable_dblink_connect_to_other
tencentdb_enable_superuser_unsafe_behaviour
说明:
开源环境无法识别特殊参数,请您将配置文件中所有 tencentdb 为前缀的项全部注释掉。
并且,修改以下项:
port = 5432 #将原本的端口号修改为5432
log_directory = '/usr/local/pgsql/logs' #可根据实际需要调整
log_destination = 'csvlog' #将原本的'csvlog,auditlog'修改为log_destination = 'csvlog'
最后,在文件末尾添加两行:
unix_socket_directories = '/usr/local/pgsql/data' #可根据实际需要调整
primary_conninfo = 'host=*.*.*.* port=5432 user=dbadmin password=对应密码' #host填写云数据库IP地址,user填写连接数据库的账号名
修改完毕后,按 esc 键退出编辑模式,并输入 :wq 保存修改并退出文件。
2. 执行以下命令,进入 pg_hba.conf 配置文件中。
[root@VM-10-6-tencentos pgsql]# vi /usr/local/pgsql/data/pg_hba.conf
按 i 键进入编辑模式,找到以下内容,在行首添加英文字符 # 将其注释掉。
host all postgres 0.0.0.0/0 reject
修改完毕后,按 esc 键退出编辑模式,并输入 :wq 保存修改并退出文件。

步骤3: 启动数据库,查看备份数据

使用普通用户 pgsql 账号登录,启动云服务器本地的数据库:
[root@VM-10-6-tencentos pgsql]# su - pgsql
[pgsql@VM-10-6-tencentos pgsql]$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
waiting for server to start.... done
server started
在 pgAdmin 客户端连接到云服务器的数据库,可以查看到物理备份的数据。


步骤4: 验证主备链路

登录 云数据库 PostgreSQL 控制台,登录数据库实例,执行以下 SQL 语句:
select * from pg_stat_replication;
如下图所示,执行结果将显示刚才建立的主备链路。

主备环境搭建成功。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈