HighGo Database判断流复制主备角色的方法

文章目录

文档用途

HighGo Database数据库流复制判断主备角色

详细信息

进行流复制主备切换之前首先要知道当前数据库的角色,以下提供五种方法判断数据库角色,测试环境为一主一备。

1.通过pg_controldata命令查看数据库的控制信息,Database cluster state字段信息可判断是主库还是备库。

主库返回in production:

sql 复制代码
[highgo@localhost ~]$ pg_controldata |grep cluster
Database cluster state:               in production

备库返回in archive recovery:

sql 复制代码
[highgo@localhost ~]$ pg_controldata |grep cluster
Database cluster state:               in archive recovery

2.通过进程查看,ps -ef | grep wal | grep -v grep。

显示wal sender ...streaming进程说明当前数据库为主库:

sql 复制代码
[highgo@localhost ~]$ ps -ef | grep wal | grep -v grep
highgo    10625  10239  0 07:03 ?        00:00:00 postgres: wal writer process  
highgo    14540  10239  0 10:00 ?        00:00:00 postgres: wal sender process repuser x.x.150.163(63146) streaming 0/100991F8

显示wal receive ...streaming说明当前数据库为备库:

sql 复制代码
[highgo@localhost ~]$ ps -ef | grep wal | grep -v grep
highgo    18692  18687  0 10:00 ?        00:00:00 postgres: wal receiver process   streaming 0/100991F8

3.通过查看数据字典表pg_stat_replication。进入psql客户端,输入select * from pg_stat_replication;

主库在表中能查到记录:

sql 复制代码
[highgo@localhost ~]$ psql
psql (4.7.6)

PSQL: Release 4.7.6
Connected to:
HighGo Database V4.7 Standard Edition Release 4.7.6 - 64-bit Production

Type "help" for help.

highgo=# select * from pg_stat_replication;
  pid  | usesysid | usename | application_name |   client_addr   | client_hostna
me | client_port |         backend_start         | backend_xmin |   state   | se
nt_location | write_location | flush_location | replay_location | sync_priority
| sync_state
-------+----------+---------+------------------+-----------------+--------------
---+-------------+-------------------------------+--------------+-----------+---
------------+----------------+----------------+-----------------+---------------
+------------
 14540 |    16384 | repuser | walreceiver      | x.x.150.163 |             
   |       63146 | 2019-01-10 10:00:23.252552+08 |              | streaming | 0/
100991F8    | 0/100991F8     | 0/100991F8     | 0/100991F8      |             0
| async
(1 row)

备库在表中无记录:

sql 复制代码
highgo=#  select * from pg_stat_replication;
 pid | usesysid | usename | application_name | client_addr | client_hostname | c
lient_port | backend_start | backend_xmin | state | sent_location | write_locati
on | flush_location | replay_location | sync_priority | sync_state
-----+----------+---------+------------------+-------------+-----------------+--
-----------+---------------+--------------+-------+---------------+-------------
---+----------------+-----------------+---------------+------------
(0 rows)

4.通过系统函数pg_is_in_recovery()判断。

进入psql客户端,输入select pg_is_in_recovery();

主库返回:

sql 复制代码
highgo=# select pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 f
(1 row)

备库返回t:

sql 复制代码
highgo=# select pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 t
(1 row)

5.通过recovery.conf配置文件判断。

进入$PGDATA目录,存在recovery.conf配置文件说明是备库:

sql 复制代码
[highgo@localhost ~]$ cd $PGDATA
[highgo@localhost data]$ ls
backup_label.old  pg_dynshmem    pg_snapshots  postgresql.auto.conf
base              pg_hba.conf    pg_stat       postgresql.conf
data.tar.gz       pg_ident.conf  pg_stat_tmp   postmaster.opts
global            pg_logical     pg_subtrans   postmaster.pid
hgdb.lic          pg_multixact   pg_tblspc     recovery.conf
hgdb_log          pg_notify      pg_twophase
pg_clog           pg_replslot    PG_VERSION
pg_commit_ts      pg_serial      pg_xlog

不存在recovery.conf或此文件后缀名是recovery.done说明是主库。

sql 复制代码
[highgo@localhost ~]$ cd $PGDATA
[highgo@localhost data]$ ls
backup_label.old  pg_commit_ts   pg_serial     pg_xlog
base              pg_dynshmem    pg_snapshots  postgresql.auto.conf
data.tar.gz       pg_hba.conf    pg_stat       postgresql.conf
global            pg_ident.conf  pg_stat_tmp   postmaster.opts
hgdb.lic          pg_logical     pg_subtrans   postmaster.pid
hgdb_log          pg_multixact   pg_tblspc
NIH               pg_notify      pg_twophase
pg_clog           pg_replslot    PG_VERSION
相关推荐
崎岖Qiu16 小时前
Redis Set 实战:基于「并、差、交集」的分布式场景应用
数据库·redis·分布式·后端
PD我是你的真爱粉16 小时前
构建高可用的Redis 集群
数据库·redis·缓存
_OP_CHEN18 小时前
【MySQL数据库基础】(一)保姆级 MySQL 环境配置教程!CentOS 7+Ubuntu 双系统全覆盖
linux·数据库·sql·mysql·ubuntu·centos·环境配置
Drifter_yh1 天前
【黑马点评】Redisson 分布式锁核心原理剖析
java·数据库·redis·分布式·spring·缓存
鸽鸽程序猿1 天前
【Redis】zset 类型介绍
数据库·redis·缓存
z玉无心1 天前
Redis
数据库·redis·oracle
予枫的编程笔记1 天前
【Redis核心原理篇2】Redis 单线程模型:为什么单线程还能这么快?
数据库·redis·缓存
fengxin_rou1 天前
一文吃透 Redis 压缩列表、listpack 及哈希表扩容与并发查询
数据库·redis·散列表
一只鹿鹿鹿1 天前
智慧水利一体化建设方案
大数据·运维·开发语言·数据库·物联网
_codemonster1 天前
数据库字符集编码问题
android·数据库·oracle