本文将指导你如何在Ubuntu 20.04上安装和配置PostgreSQL数据库的主从备份(流复制)。将通过一系列步骤,首先安装PostgreSQL 14版本,然后配置主数据库和从数据库的复制,确保数据能够在主库与从库之间同步。
一、安装PostgreSQL 14
1、查看可安装的 PostgreSQL 包
首先,列出所有可用的 PostgreSQL 相关包,确认版本后进行安装。这里我们安装的是 PostgreSQL 14 版本。
apt list | grep -w postgresql-14 | tail -1
2、安装PostgreSQL 14
运行以下命令安装 PostgreSQL 14:
apt install -y postgresql-14/focal-pgdg
安装完成后,检查是否安装成功:
psql --version
3、设置服务开机自启
为了确保 PostgreSQL 在系统重启后自动启动,执行以下命令:
systemctl enable postgresql.service
二、配置PostgreSQL主服务器
1、切换到PostgreSQL用户并登录数据库
为了配置 PostgreSQL,我们需要切换到 “postgres” 用户,并进入 PostgreSQL 数据库命令行。
sudo -u postgres psql
2、修改PostgreSQL密码
在 PostgreSQL 命令行中,修改 “postgres” 用户的密码(根据实际需求修改 “<密码>”):
alter user postgres password '<密码>';
3、创建用于复制的角色
为了实现主从复制,我们需要创建一个专门用于复制的角色,并赋予 “replication” 和 “login” 权限。
create role replica login replication encrypted password '<密码>';
4、查看PostgreSQL配置文件位置
通过以下命令,查看 PostgreSQL 配置文件的位置:
select name, setting from pg_settings where category='文件位置';
配置文件通常位于 “/etc/postgresql/14/main/” 目录下。
5、配置远程连接
为了允许远程连接 PostgreSQL 数据库,编辑 “pg_hba.conf” 文件:
echo "host all all 0.0.0.0/20 md5" >> /etc/postgresql/14/main/pg_hba.conf
然后编辑 “postgresql.conf” 文件,允许所有地址进行监听:
echo "listen_addresses='*'" >> /etc/postgresql/14/main/postgresql.conf
6、重启PostgreSQL服务
修改完成后,重启 PostgreSQL 服务以应用配置:
systemctl restart postgresql.service
7、配置主服务器的复制设置
接下来,编辑主服务器的配置文件 “postgresql.conf” 和 “pg_hba.conf” 以启用流复制。
编辑 “postgresql.conf” 文件,确保以下参数已设置:
vim /etc/postgresql/14/main/postgresql.conf
# 启用流复制 wal_level = hot_standby # 允许最大数量的复制进程 max_wal_senders = 2 # 默认配置,不直接影响主从设置 wal_keep_size = 1000 max_connections = 1000
编辑 “pg_hba.conf” 文件,允许从数据库连接到主数据库获取 WAL 日志:
vim /etc/postgresql/14/main/pg_hba.conf
添加以下配置(替换 “<从节点IP>” 为从库的实际 IP 地址):
# 允许从库连接主库进行复制 host replication replica <从节点IP>/24 scram-sha-256
完成后,重启 PostgreSQL 服务:
systemctl restart postgresql.service
三、配置从服务器
1、安装PostgreSQL和配置从服务器
在从服务器上执行与主服务器相同的安装操作,并停止 PostgreSQL 服务:
systemctl stop postgresql
2、备份主数据库数据并清除从库数据
切换到 “postgres” 用户后,备份当前数据目录,并清除本地数据库数据:
su - postgres cp -r /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak rm -rf /var/lib/postgresql/14/main
3、执行主数据库的全量备份
使用 “pg_basebackup” 从主数据库获取数据备份。”-U replica” 是在主库上创建的用于复制的用户,”-D” 指定从库的数据目录。
pg_basebackup -h <主节点IP> -U replica -F p -X stream -P -R -D /var/lib/postgresql/14/main
- – “-h”:指定主节点的 IP 地址;
- – “-U”:指定用于复制的用户;
- – “-F p”:以压缩格式备份;
- – “-X stream”:流式传输 WAL 日志;
- – “-P”:启用进度报告;
- – “-R”:自动生成恢复配置文件(包括 “standby.signal”);
- – “-D”:指定数据目录。
4、配置从库的PostgreSQL配置文件
在从库上修改 PostgreSQL 配置文件,确保启用查询并设置流复制相关的参数:
sudo vim /etc/postgresql/14/main/postgresql.conf
在配置文件中,添加以下设置:
# 启用热备份模式 hot_standby = on # 设置流复制最大延迟(可选) max_standby_streaming_delay = 30s # 启用从库的热备反馈(可选) hot_standby_feedback = on # 配置最大连接数 max_connections = 1000
5、重启从库PostgreSQL服务
修改完配置后,重启从库的 PostgreSQL 服务:
systemctl restart postgresql
四、验证主从复制是否成功
1、在主数据库中查看复制状态
登录到主数据库,查看复制进程的状态:
select client_addr, sync_state from pg_stat_replication;
如果主库正在与从库同步数据,你将看到类似如下的输出:
client_addr | sync_state --------------+------------ 192.168.1.2 | sync
2、检查同步进程
如果 “sync_state” 显示为 “sync”,则表示主从同步正常。
-
广告合作
-
QQ群号:707632017