转自:https://blog.csdn.net/joy_chou12/article/details/89351634
1.下载tar.gz
https://www.postgresql.org/ftp/source/
2.解压到/usr/local
# tar -zxvf postgresql-10.5.tar.gz
3.创建用户和组
# groupadd postgres
# useradd -g postgres postgres
4.进行编译安装
# cd postgresql-10.5
# ./configure --prefix=/usr/local/postgresql-10.5 --without-readline --预编译
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 --初始化数据库
$ /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下启动
5.修改postgresql.conf
$ vi /usr/local/pgsql/data/postgresql.conf
#修改
listen_addresses = '*'
6.修改pg_hba.conf
$ vi /usr/local/pgsql/data/pg_hba.conf
#添加
host all all 0.0.0.0/0 trust
7.添加环境变量
# 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
8.重启
$ /usr/local/postgresql-10.5/bin/pg_ctl restart -D /usr/local/pgsql/data/ -m fast
9.登录
$ su - postgres
$ psql
搭建主从库:
主 192.168.79.130
从 192.168.79.134
主:
1.创建归档路径:/data/postgres/arch(路径必须赋postgres权限)
mkdir -p /data/postgres/arch
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权限的用户
create user rep replication login encrypted password 'rep123';
b.主库修改认证配置文件,添加rep的replication认证信息
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.
解决:
确保data目录权限为700
cd /usr/local/pgsql/data/
chmod -R 700 *
Q2.
$ pg_ctl start -D ./
解决:
更改
vi /etc/security/limits.conf 添加如下两行
* soft nofile 102400
* hard nofile 102400
cat /etc/sysctl.conf 添加如下一行
kernel.sem = 4096 2147483647 2147483646 512000