centos8 postgresql14主服务器:192.168.80.128 从服务器:192.168.80.133 做主从复制,有哪些步骤,具体的命令是什么,从数据库需要初始化吗

发布时间 2023-04-06 02:54:48作者: 伸手触摸阳光
centos8 postgresql14主服务器:192.168.80.128 从服务器:192.168.80.133 做主从复制,有哪些步骤,具体的命令是什么,从数据库需要初始化吗
 
 
 

为了进行主从复制,您需要在 PostgreSQL 主服务器和从服务器上执行以下步骤:

  1. 在主服务器上配置 PostgreSQL

在主服务器上的 postgresql.conf 文件中,开启 WAL 日志和归档,并指定归档目录,具体命令如下:

 
# 修改 postgresql.conf 文件 sudo vim /var/lib/pgsql/14/data/postgresql.conf # 在文件中添加以下内容 wal_level = replica archive_mode = on archive_command = 'cp %p /var/lib/pgsql/14/archive/%f'
  1. 在主服务器上配置 pg_hba.conf

在主服务器上的 pg_hba.conf 文件中添加从服务器的 IP 和复制用户的授权信息,具体命令如下:

 
# 修改 pg_hba.conf 文件 sudo vim /var/lib/pgsql/14/data/pg_hba.conf # 在文件中添加以下内容 host replication all 192.168.80.133/32 md5
  1. 在主服务器上创建复制用户并授权

在主服务器上创建一个用于复制的用户,并授予 REPLICATION 权限,具体命令如下:

 
# 登录到主服务器上的 PostgreSQL sudo -u postgres psql # 创建复制用户 CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'password'; # 退出 PostgreSQL \q
  1. 在从服务器上安装 PostgreSQL

在从服务器上安装与主服务器上相同版本的 PostgreSQL,并确保已启用 systemctl 服务,具体命令如下:

 
# 安装 PostgreSQL sudo dnf install -y postgresql14-server # 启用服务 sudo systemctl enable postgresql-14
  1. 在从服务器上创建基本备份

在从服务器上,使用 pg_basebackup 命令创建一个基本备份,用于从主服务器复制数据,具体命令如下:

 
# 创建备份 sudo -u postgres pg_basebackup -h 192.168.80.128 -U replica -D /var/lib/pgsql/14/data -P --wal-method=stream
  1. 在从服务器上配置 recovery.conf 文件

在从服务器上的 recovery.conf 文件中指定连接到主服务器的信息,以及从服务器用于接收 WAL 日志的目录,具体命令如下:

 
# 修改 recovery.conf 文件 sudo vim /var/lib/pgsql/14/data/recovery.conf # 在文件中添加以下内容 standby_mode = 'on' primary_conninfo = 'host=192.168.80.128 port=5432 user=replica password=password' restore_command = 'cp /var/lib/pgsql/14/archive/%f %p'
  1. 启动从服务器并检查复制状态

在从服务器上启动 PostgreSQL 服务,并检查从服务器的状态,具体命令如下:

 
# 启动从服务器 sudo systemctl start postgresql-14 # 检查从服务器的状态 sudo systemctl status postgresql-14

需要注意的是,在进行主从复制前,主服务器上已经存在的数据需要手动同步到从服务器上。如果从服务器上的数据与主服务器上的数据不一致,则需要

 
主数据库和从数据库的数据目录一定要一致吗
 
 
 

在进行 PostgreSQL 主从复制时,主数据库和从数据库的数据目录可以不一致。从数据库的数据目录可以位于从服务器的任意目录中,只需要在 recovery.conf 文件中指定正确的数据目录即可。

recovery.conf 文件中,使用 restore_command 指定从主数据库接收 WAL 日志并将其还原到从数据库的目录中。例如:

 
restore_command = 'cp /path/to/archive/%f %p'

在上面的命令中,/path/to/archive 是主数据库的归档目录,%f 表示还原的 WAL 日志文件名,%p 表示还原的目标路径。

因此,从数据库的数据目录和主数据库的归档目录需要一致,但不需要和主数据库的数据目录一致。如果从数据库的数据目录与主数据库的数据目录一致,则需要在从数据库上停止 PostgreSQL 服务,将数据目录移动到正确的位置,然后修改 postgresql.conf 文件中的数据目录位置,并重新启动 PostgreSQL 服务。