1. 上传压缩安装包到服务器

image.png

  1. 解压

gunzip postgresql-10.5.tar.gz
tar -xvf postgresql-10.5.tar

image.png
image.png

  1. 创建用户和组

groupadd postgres
# useradd -g postgres postgres
image.png

  1. 编译安装

cd postgresql-10.5
# ./configure —prefix=/usr/local/postgresql-10.5 —without-readline —预编译
image.png
p.s.
Q:出现configure: error: zlib library not found解决方法
# yum install zlib-devel
# make
# make install —安装
# mkdir -p /usr/local/pgsql/data
# chown postgres /usr/local/pgsql/data
# su - postgres
$ /usr/local/postgresql-10.5/bin/initdb -D /usr/local/pgsql/data -E UTF-8 —locale=zh_CN.UTF-8 —初始化数据库
$ /usr/local/postgresql-10.5/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 & —启动数据库
$ cd /usr/local/postgres-10.5/bin
$ ./pg_ctl start -D /usr/local/pgsql/data —要在postgres下启动

  1. 修改postgresql.conf

$ vi /usr/local/pgsql/data/postgresql.conf
#修改
listen_addresses = ‘*’

  1. 修改pg_hba.conf

$ vi /usr/local/pgsql/data/pg_hba.conf
#添加
host all all 0.0.0.0/0 trust

  1. 添加环境变量

vi /etc/profile
export PGHOME=/usr/local/postgresql-10.5
export PGDATA=/usr/local/pgsql/data
export PATH=$PGHOME/bin:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/data56/lib64:/lib:/usr/lib:/data56/lib:$LD_LIBRARY_PATH

  1. 重启

$ /usr/local/postgresql-10.5/bin/pg_ctl restart -D /usr/local/pgsql/data/ -m fast

启动 /usr/local/postgresql-10.5/bin/pg_ctl -D /usr/local/pgsql/data/ -l logfile start 停止 /usr/local/postgresql-10.5/bin/pg_ctl -D /usr/local/pgsql/data/ stop 重启 /usr/local/postgresql-10.5/bin/pg_ctl restart -D /usr/local/pgsql/data/ -m fast

  1. 登录

$ su - postgres

$ psql

搭建主从库:
主 192.168.79.130

从 192.168.79.134

主:

1.创建归档路径:/data/postgres/arch(路径必须赋postgres权限)

  1. mkdir -p /data/postgres/arch
  2. chown -R postgres:postgres /data

2.添加配置项(vi /usr/local/pgsql/data/postgresql.conf)

max_connections = 1000 ##最大连接数,这个设置要注意下,从库的max_connections必须要大于主库的

shared_buffers = 32GB ##约为内存的1/4左右

effective_cache_size = 96GB ##约为内存的1/2到3/4左右

work_mem = 16MB ##排序哈希,约为内存/最大连接数/4 到 内存/最大连接数/16 之间 8-32M 。

maintenance_work_mem = 2GB ##用于analyzing,vacuum,create index, reindex等

checkpoint_completion_target = 0.7 ##检查点完成的目标

min_wal_size = 1GB

max_wal_size = 2GB

wal_level = hot_standby

wal_buffers = 16MB ##用于还未写入磁盘的 WAL 数据的共享内存量

max_wal_senders = 32 ##同时运行 WAL 发送进程 的最大数

wal_keep_segments = 1024 ##pg_xlog目录下所能保留的过去日志文件段的最小数目

wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间

shared_preload_libraries = ‘pg_stat_statements’

port = 5210

listen_addresses = ‘*’

logging_collector = on

log_rotation_age = 15d ##一个个体日志文件的最长生命期F-

log_rotation_size = 1024MB ##一个个体日志文件的最大尺寸

max_replication_slots = 2000 #复制槽,设置后主库可以随时知道从库的wal应用情况

archive_mode = on

archive_command = ‘cp %p /data/postgres/arch/%f’ ##归档命令,要创建相应归档路径

pg_stat_statements.max=10000

pg_stat_statements.track=all

log_line_prefix=’%t[%p]:[%l-1] user=%u, db=%d, remote=%r ‘ ##log行头标记

3.修改 pg_hba.conf

a.主库创建具有replication权限的用户

  1. create user rep replication login encrypted password 'rep123';

b.主库修改认证配置文件,添加rep的replication认证信息

  1. host replication rep 192.168.0.0/16 md5

4.重启

$ /usr/local/postgresql-10.5/bin/pg_ctl restart -D /usr/local/pgsql/data/ -m fast

从:

1.这里为了方便我直接删除data目录用于备份主服务的数据,如果有特殊的要求建议新建个data1,然后用来做从存储目录(线上项目禁用rm,可通过mv移到垃圾箱)

$ rm -rf /usr/local/pgsql/data/*

2.拷贝主数据库中的数据,注意指定的目录,如果新建了目录就指定到新建的目录

$ pg_basebackup -F p —progress -D /usr/local/pgsql/data/ -h 192.168.79.130 -p 5432 -U rep —password
3.复制配置文件并改名,注意文件路径及文件名称

$ cp /usr/local/postgresql-10.5/share/recovery.conf.sample /usr/local/pgsql/data/recovery.conf
4.编辑recovery.conf文件,配置如下(修改是记得备份)
standby_mode = on #说明这台postgres,为从库
primary_conninfo = ‘host=192.168.79.130 port=5432 user=rep password=rep123’ #配置要同步的ip及库用户还有密码
recovery_target_timeline = ‘latest’ #流复制同步到最新的数据
5.编辑postgresql.conf文件,配置如下
listen_addresses = ‘*’ #这表示监听的ip,这里我设置监听所有ip,也可以设置成从本机ip
wal_level = hot_standby #注:这个名称要与主的一致
max_connections = 1000 #最大连接数要大于主的
hot_standby = on #说明这台机器不仅仅用于数据归档,也用于查询
max_standby_streaming_delay = 30s #数据流备份最大延迟
wal_receiver_status_interval = 1s #多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
hot_standby_feedback = on #如果有错误的数据复制,是否向主进行反馈
6.配置完成后启动从数据库服务

$ /usr/local/postgresql-10.5/bin/pg_ctl -D /usr/local/pgsql/data/ start

7.测试

p.s.

从新搭从库
1.删除主库replication_slot
select from pg_replication_slots; #查看slot_name
SELECT
FROM pg_drop_replication_slot(‘abc_slot’); #删除slot_name为abc_slot

2.删除从库路径
rm -rf /data/postgres/data_abc_5213
rm -rf /data/postgres/arch_abc_5213

Question:

Q1.
image.png
解决:
确保data目录权限为700
cd /usr/local/pgsql/data/
chmod -R 700 *
Q2.
$ pg_ctl start -D ./
image.png
解决:

更改
vi /etc/security/limits.conf 添加如下两行
soft nofile 102400
hard nofile 102400

cat /etc/sysctl.conf 添加如下一行
kernel.sem = 4096 2147483647 2147483646 512000
————————————————
版权声明:本文为CSDN博主「JOY去吧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/joy_chou12/article/details/89351634
[

](https://blog.csdn.net/joy_chou12/article/details/89351634)