searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

PG数据库双主恢复方法

2023-10-25 06:29:41
42
0

PG数据库,即PostgreSQL数据库,是一种特性非常齐全的自由软件的对象-关系型数据库管理系统。因其高度的可靠性、可扩展性以及数据完整性等优点而被广泛应用于Web应用程序、企业级应用程序、移动应用程序等。PG数据库与keepalive结合使用可实现一主多从,实现数据库的高可用。但是这种方式在使用过程中可能会出现双主的问题,本文主要介绍如何解决双主问题。

查看数据库主备信息以及版本信息常用命令

使用pg_controldata命令查询

首先登录切换到postgres用户:su – postgres

然后执行命令查询:pg_controldata | grep cluster

显示in production的为主数据库节点

显示in archive recovery的为备数据库节点

使用sql命令查询

首先登录切换到postgres用户:su – postgres

然后登录数据库:psql

执行select pg_is_in_recovery();

t表示当前节点为备节点

f表示当前节点为主节点

查看pg版本信息

su - postgres

psql –version

以9.x版本和14.x为例

PG数据库双主故障恢复

如果通过以上命令查询到数据库出现了双主的情况,则按以下步骤恢复:

当前数据库版本是9.x

1、确认真正的主数据库节点,一般vip所在的节点为真正的主节点。假定 B 为真正的主节点,A 为备节点。

2、恢复前备份好数据。登陆A,B节点分别执行
     切换到数据库用户:su - postgres
     进入数据库安装目录cd /home/postgres
     cp -arf data /opt/

3、登陆A节点,停止keepalived

4、su - postgres

5、停止 postgres

6、pg_ctl stop

7、mv data databak     # 将备pg 的data换个名字

8、mkdir data

9、chmod  0700 data

10、将主数据库的data目录同步到备pg上

     pg_basebackup -X stream -D $PGDATA -h slave -U repuser

     slave  填另一个postgres 的 hostname或者ip,可从hosts文件中获取

11、mv data/recovery.done  data/recovery.conf

     修改备recovery.conf 文件最后一行

     primary_conninfo = 'host=master port=5432 user=repuser password={{ pg_rep_passwd }}' 

     # master 填另一个pg的hostname,从hosts文件中获取

12、pg_ctl start  # 启动备库

13、验证双主问题是否解决:pg_controldata | grep cluster,显示in archive recovery表示当前数据库已启动,且为备库

14、登录主库验证数据同步情况,有以下记录说明被数据库正从当前机器备份数据

postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 6091
usesysid         | 16384
usename          | repuser
application_name | walreceiver
client_addr      | x.x.x.x(当前数据库节点的IP)
client_hostname  | slave
client_port      | 62655
backend_start    | 2022-03-31 21:31:28.095526+08
backend_xmin     | 
state            | streaming
sent_location    | 2A/86BF7DF8
write_location   | 2A/86BF7DF8
flush_location   | 2A/86BF7DF8
replay_location  | 2A/86BF7D80
sync_priority    | 0
sync_state       | async

当前数据库版本是14.x

1-7步同9.x

8、登录准备作为备数据的节点(A节点),su – postgres切换到数据库用户

9、进入数据库安装目录cd /home/postgres14/bin/

     在salve节点上执行以下命令:

     pg_basebackup -h <ip of another postgres> -p 5432 -U repuser -F p -P -R -D data -X stream --progress

     确认主备数据库节点该文件/home/postgres14/data/pg_hba.conf 中最后一行 <slave> 中分别为对方节点 在hosts文件中对应的hostname,

     代表授权对方信任

host    replication     repuser         slave                   trust

后续步骤同9.x的12-14步

0条评论
0 / 1000
y****n
2文章数
0粉丝数
y****n
2 文章 | 0 粉丝
y****n
2文章数
0粉丝数
y****n
2 文章 | 0 粉丝
原创

PG数据库双主恢复方法

2023-10-25 06:29:41
42
0

PG数据库,即PostgreSQL数据库,是一种特性非常齐全的自由软件的对象-关系型数据库管理系统。因其高度的可靠性、可扩展性以及数据完整性等优点而被广泛应用于Web应用程序、企业级应用程序、移动应用程序等。PG数据库与keepalive结合使用可实现一主多从,实现数据库的高可用。但是这种方式在使用过程中可能会出现双主的问题,本文主要介绍如何解决双主问题。

查看数据库主备信息以及版本信息常用命令

使用pg_controldata命令查询

首先登录切换到postgres用户:su – postgres

然后执行命令查询:pg_controldata | grep cluster

显示in production的为主数据库节点

显示in archive recovery的为备数据库节点

使用sql命令查询

首先登录切换到postgres用户:su – postgres

然后登录数据库:psql

执行select pg_is_in_recovery();

t表示当前节点为备节点

f表示当前节点为主节点

查看pg版本信息

su - postgres

psql –version

以9.x版本和14.x为例

PG数据库双主故障恢复

如果通过以上命令查询到数据库出现了双主的情况,则按以下步骤恢复:

当前数据库版本是9.x

1、确认真正的主数据库节点,一般vip所在的节点为真正的主节点。假定 B 为真正的主节点,A 为备节点。

2、恢复前备份好数据。登陆A,B节点分别执行
     切换到数据库用户:su - postgres
     进入数据库安装目录cd /home/postgres
     cp -arf data /opt/

3、登陆A节点,停止keepalived

4、su - postgres

5、停止 postgres

6、pg_ctl stop

7、mv data databak     # 将备pg 的data换个名字

8、mkdir data

9、chmod  0700 data

10、将主数据库的data目录同步到备pg上

     pg_basebackup -X stream -D $PGDATA -h slave -U repuser

     slave  填另一个postgres 的 hostname或者ip,可从hosts文件中获取

11、mv data/recovery.done  data/recovery.conf

     修改备recovery.conf 文件最后一行

     primary_conninfo = 'host=master port=5432 user=repuser password={{ pg_rep_passwd }}' 

     # master 填另一个pg的hostname,从hosts文件中获取

12、pg_ctl start  # 启动备库

13、验证双主问题是否解决:pg_controldata | grep cluster,显示in archive recovery表示当前数据库已启动,且为备库

14、登录主库验证数据同步情况,有以下记录说明被数据库正从当前机器备份数据

postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 6091
usesysid         | 16384
usename          | repuser
application_name | walreceiver
client_addr      | x.x.x.x(当前数据库节点的IP)
client_hostname  | slave
client_port      | 62655
backend_start    | 2022-03-31 21:31:28.095526+08
backend_xmin     | 
state            | streaming
sent_location    | 2A/86BF7DF8
write_location   | 2A/86BF7DF8
flush_location   | 2A/86BF7DF8
replay_location  | 2A/86BF7D80
sync_priority    | 0
sync_state       | async

当前数据库版本是14.x

1-7步同9.x

8、登录准备作为备数据的节点(A节点),su – postgres切换到数据库用户

9、进入数据库安装目录cd /home/postgres14/bin/

     在salve节点上执行以下命令:

     pg_basebackup -h <ip of another postgres> -p 5432 -U repuser -F p -P -R -D data -X stream --progress

     确认主备数据库节点该文件/home/postgres14/data/pg_hba.conf 中最后一行 <slave> 中分别为对方节点 在hosts文件中对应的hostname,

     代表授权对方信任

host    replication     repuser         slave                   trust

后续步骤同9.x的12-14步

文章来自个人专栏
数据库故障恢复
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0