postgresql离线安装及双机热备

发布时间 2023-07-01 17:39:27作者: 四毛二

1.安装依赖(主机,备机) root用户

在一台有网的电脑上先下载好所需的依赖
yum install --downloadonly --downloaddir=/tmp/ zlib-devel readline-devel gcc-c++ -y

然后将下载的rpm全部拷贝到装postgresql电脑上,我这里打包好了所有的依赖和9.6.10的安装包,一起上传到服务器,有需要的自己下(链接:https://pan.baidu.com/s/1nDUcIdiMSXLrByH3S9YTNg 提取码:gxrj

解压文件并安装依赖

tar -zxvf postgresql.tar.gz

进入到dependencies目录下执行

rpm -Uvh --force --nodeps *.rpm

 

 2.关闭firewalld(主机,备机) root用户

关闭firewalld
systemctl stop firewalld
systemctl disable firewalld

 

 3.编译安装(主机,备机) root用户

解压postgresqlan安装文件
tar -zxvf postgresql-9.6.10.tar.gz

 

创建安装目录

mkdir -p /usr/local/pgsql

检查安装环境

./configure --prefix=/usr/local/pgsql

 

编译

make

 

安装

make install

 

 4.创建postgres用户来安装postgresql(主机,备机) root用户

创建用户组和用户
groupadd postgres useradd
-g postgres postgres passwd postgres

 

在/usr/local/pgsql下创建数据目录data,log

mkdir -p /usr/local/pgsql/data

mkdir -p /usr/local/pgsql/log
赋予postgres用户整个pgsql目录的权限

chown -R postgres:postgres /usr/local/pgsql

 

 

5.配置环境变量(主机,备机) root用户

在/etc/profile文件最后加入下面内容
vim
/etc/profile
#postgresql 
export PGDATA=/usr/local/pgsql/data
export PGHOME=/usr/local/pgsql
export PATH=$PGHOME/bin:$PATH

 

使环境变量生效 source /etc/profile

 

6.初始化pgsql数据库(主机) postgres用户

切换到postgres用户
su - postgres

 到安装包目录下执行

cd /opt/postgresql/postgresql-9.6.10

initdb

 

 7.启动pgsql服务并配置主从关系(主机:192.168.31.23,备机:192.168.31.49)(主机) postgres用户

启动服务
pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/postgresql.log start 
查看服务进程
ps
-ef|grep postgres

 

用自带的工具连接数据库并修改postgres用户密码

psql

\password

 

创建热备用户

create role data_backup login replication encrypted password '123456';

 使用\q退出数据库

 

修改配置文件

vim /usr/local/pgsql/data/postgresql.conf

按照下面进行配置修改(需要在文件中找,有的是注释掉的

listen_addresses="*"
port=5432
max_connections=500
wal_level=hot_standby  #wal归档复制级别为hot_standby异步流复制
max_wal_senders=2  #主库可以最多有多少个并发的standby数据库
wal_keep_segments=64  #指定pg_xlog目录保存的wal log的最小数量。每个文件一般是16M。

 

vim /usr/local/pgsql/data/pg_hba.conf

按照如下进行配置修改

 

 重启数据库

pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/postgresql.log restart

 

可以使用数据库连接工具远程连接了

 

8. 启动备机数据库(备机) postgres用户

切换到postgres用户
su - postgres

 

从主机备份数据

pg_basebackup -h 192.168.31.23 -p 5432 -U data_backup -F p -P -D /usr/local/pgsql/data

这里要求输入数据库备份用户的密码,我这里是123456,第一次输输错了服务器postgres用户的密码,所以报错了

 

修改配置文件

vim /usr/local/pgsql/data/postgresql.conf

按照下面进行配置修改

max_connections=1000 #最大连接数一般大于主库就行
#wal_level=hot_standby #从库不需要这个配置 下面两个参数也注释掉
#max_wal_senders=2 
#wal_keep_segments=64 
hot_standby=on #开启hot_standby模式
max_standby_streaming_delay=30s #可选,流复制最大延迟
wal_receiver_status_interval=10s #可选,向主库报告状态的最大间隔时间
hot_standby_feedback=on #可选,查询冲突时向主库反馈

 

创建恢复配置recovery.conf文件

这个文件在安装postgresql时,会生成到/usr/local/pgsql/share/postgresql目录下,名字是recovery.conf.sample。
我们复制并修改名称为recovery.conf并放置在/usr/local/pgsql/data目录下

cp /usr/local/pgsql/share/recovery.conf.sample /usr/local/pgsql/data/recovery.conf

vim /usr/local/pgsql/data/postgresql.conf

按照如下进修配置修改

recovery_target_timeline = 'latest'  #从主库恢复最新的数据
standby_mode = on  #开启备库
primary_conninfo = 'host=192.168.31.149 port=5432 user=data_backup password=123456' #连接主库

 

启动数据库

pg_ctl -D /usr/local/pgsql/data/ -l /usr/local/pgsql/log/postgresql.log start

查看下进程发现postgres没有起来,看日志可以发现是/usr/local/pgsql/data 目录的权限有问题(这里是个坑,pg_basebackup过来的文件权限不是700)

切换到root用户执行

chmod 700 -R /usr/local/pgsql/data

然后切回到postgres用户在重新启动数据库

查看主机postgres进程

 

查看备机postgres进程

 

 9.测试

主库和从库都没有表

 

在主库新建一张表,并插入一条数据,看看从库中是否有