Linux安装postgresql-10.5及搭建从库

转自: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

猜你喜欢

转载自www.cnblogs.com/silentdoer/p/11848136.html