http://www.postgresql.org/download/linux/redhat/
sudo yum install -y http://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装
sudo yum install -y postgresql16-server
# 初始化(将目标目录初始化为数据库目录)
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
启动服务or开机启动:
sudo systemctl enable postgresql-16
#启动PostgreSQL服务
sudo systemctl start postgresql-16
官方生成的脚本有可能执行不了,如:No package postgresql16-server available.
这是版本太高,可能yum文件还没作好就,可以降一个版本把16换成15
密码
安装成功后会默认创建用户postgres,通过ps看进程也能看出来。修改账号密码的方式:
# 切换用户
su postgres
# 启动psql
psql
# 修改密码
ALTER USER postgres WITH PASSWORD 'NewPassword';
目录
PGDATA下面的目录及其作用(/var/lib/pgsql/12/data/):
PG_VERSION # version file. 一个包含PostgreSQL主版本号的文件
base # use to store database file(SELECT oid, datname FROM pg_database). 包含每个数据库对应的子目录的子目录
global # under global, all the filenode is hard-code(select oid,relname,relfilenode from pg_class where relfilenode=0 order by oid). 包含集簇范围的表的子目录,比如pg_database
pg_clog # dir of transaction commit log
pg_commit_ts # 包含事务提交时间戳数据的子目录
pg_dynshmem # 包含被动态共享内存子系统所使用的文件的子目录
pg_hba.conf # client authentication config file
pg_ident.conf # user ident map file
pg_logical # 包含用于逻辑复制的状态数据的子目录
pg_multixact # 包含多事务(multi-transaction)状态数据的子目录(用于共享的行锁)
pg_notify # 包含LISTEN/NOTIFY状态数据的子目录
pg_replslot # 包含复制槽数据的子目录
pg_serial # 包含已提交的可序列化事务信息的子目录
pg_snapshots # dir of snapshot file 包含导出的快照的子目录
pg_stat # 包含用于统计子系统的永久文件的子目录
pg_stat_tmp # dir of tmp stat file 包含用于统计信息子系统的临时文件的子目录
pg_subtrans # 包含子事务状态数据的子目录
pg_tblspc # 包含指向表空间的符号链接的子目录
pg_twophase # 包含用于预备事务状态文件的子目录
pg_xlog # dir of xlog file
postgresql.auto.conf # 一个用于存储由ALTER SYSTEM 设置的配置参数的文件
postgresql.conf # config file of postmaster progress
postmaster.opts # 一个记录服务器最后一次启动时使用的命令行参数的文件
postmaster.pid # pid file of postmaster progress. 一个锁文件,记录着当前的 postmaster 进程ID(PID)、集簇数据目录路径、postmaster启动时间戳、端口号、Unix域套接字目录路径(Windows上为空)、第一个可用的listen_address(IP地址或者*,或者为空表示不在TCP上监听)以及共享内存段ID(服务器关闭后该文件不存在)
配置文件
pg_hba.conf(host-based authentication)
安全相关。
基于主机的客户端认证配置文件,详细的解释:20.1. pg_hba.conf文件。
想要远程连接的话需要修改:
host all all 0.0.0.0/0 md5
postgresql.conf
通用配置。
想要远程连接主机,需要设置监听:
listen_addresses = '*'
recovery.conf
配置恢复、备份等。
主从复制
主库
修改配置文件postgresql.conf:
listen_address = '*'
wal_level = replica
archive_mode = on
archive_command = 'cp %p /data/postgresql/archive/%f '
max_wal_senders= 10
wal_keep_segments=1024
hot_standby = on
说明:
listen_address: 按需设置,本次测试配置为所有主机均可以访问,生产环境可以按需配置网段或IP等
wal_level: 设置流复制模式至少设置为replica
archive_mode: 本次启用归档
archive_command:WAL日志归档命令,生产环境可以将归档拷贝到对应目录或其他机器上,本次测试配置为归档到本机的另一个目录下
max_wal_senders: 最大WAL发送进程数,此数量需大于等于从库个数且比max_connections小。
wal_keep_segments: pg_wal目录下保留WAL日志的个数,每个WAL文件默认16M,为保障从库能在应用归档落后时依旧能追上主库,此值建议设置较大一点。
hot_standby: 此参数控制在恢复归档期间是否支持只读操作,设置为ON后从库为只读模式。
创建目录:
mkdir -p /data/postgresql/archive/
创建复制账号:
create user repl REPLICATION LOGIN ENCRYPTED PASSWORD 'repl123';
从库
使用工具开始复制:
pg_basebackup -h 192.168.56.32 -U repl -p 5432 -F p -X s -v -P -R -D /data/postgresql/data/ -l postgres32
修改配置文件:
standby_mode = 'on'
primary_conninfo = 'user=repl password=repl123 host=192.168.56.32 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any'
## 添加如下信息
recovery_target_timeline = 'latest'
启动从库:
pg_ctl -D /data/postgresql/data/ -l pg33.log start