通常来讲,厂里面都会有专门的DBA来负责管理数据库,基本的运维是不需要关心的。这也导致身为码农的我对运维知识的缺失。
希望通过本文,可以把数据库按照相对”合理“的方式跑起来。
安装导入yum源
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装
sudo yum install -y postgresql12 postgresql12-server
初始化(将目标目录初始化为数据库目录)
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
启动服务or开机启动:
#启动PostgreSQL服务sudo systemctl start postgresql-12#设置PostgreSQL服务为开机启动sudo systemctl enable postgresql-12
安装成功后会默认创建用户postgres,通过ps看进程也能看出来。修改账号密码的方式:
# 切换用户su postgres# 启动psqlpsql# 修改密码ALTER USER postgres WITH PASSWORD 'NewPassword';
PGDATA下面的目录及其作用(/var/lib/pgsql/12/data/):
PG_VERSION # version file. 一个包含PostgreSQL主版本号的文件base # use to store database file. 包含每个数据库对应的子目录的子目录global # under global, all the filenode is hard-code. 包含集簇范围的表的子目录,比如pg_databasepg_clog# dir of transaction commit logpg_commit_ts # 包含事务提交时间戳数据的子目录pg_dynshmem # 包含被动态共享内存子系统所使用的文件的子目录pg_hba.conf # client authentication config filepg_ident.conf # user ident map filepg_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 filepostgresql.auto.conf # 一个用于存储由ALTER SYSTEM 设置的配置参数的文件postgresql.conf # config file of postmaster progresspostmaster.opts # 一个记录服务器最后一次启动时使用的命令行参数的文件postmaster.pid# pid file of postmaster progress. 一个锁文件,记录着当前的 postmaster 进程ID(PID)、集簇数据目录路径、postmaster启动时间戳、端口号、Unix域套接字目录路径(Windows上为空)、第一个可用的listen_address(IP地址或者*,或者为空表示不在TCP上监听)以及共享内存段ID(服务器关闭后该文件不存在)
启动后观察进程:
说明:
据说是因为刚开始UNIX上面没有线程(或者说线程支持的不够好,所以使用了多进程架构)。
安全相关。
基于主机的客户端认证配置文件,详细的解释:20.1. pg_hba.conf文件。
想要远程连接的话需要修改:
host all all 0.0.0.0/0 md5
通用配置。
想要远程连接主机,需要设置监听:
listen_addresses = '*'
配置恢复、备份等。
修改配置文件postgresql.conf:
listen_address = '*'wal_level = replicaarchive_mode = on archive_command = 'cp %p /data/postgresql/archive/%f 'max_wal_senders= 10 wal_keep_segments=1024hot_standby = on
说明:
listen_address: 按需设置,本次测试配置为所有主机均可以访问,生产环境可以按需配置网段或IP等wal_level: 设置流复制模式至少设置为replicaarchive_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
TODO
- PostgreSQL 数据存储目录结构和进程结构
- PG的进程架构_murkey的专栏-CSDN博客
- 在CentOS 7上安装&配置PostgreSQL 12
- PostgreSQL 13.1 手册
- Postgresql实现主从复制,读写分离-云社区-华为云
- Postgresql主从复制--物理复制 - 云+社区 - 腾讯云
- recovery.conf文件详解 - 狂神314 - 博客园