启动

核心提示背景和目标通常来讲,厂里面都会有专门的DBA来负责管理数据库,基本的运维是不需要关心的。这也导致身为码农的我对运维知识的缺失。希望通过本文,可以把数据库按照相对”合理“的方式跑起来。安装导入yum源sudo yum install -y h
背景和目标

通常来讲,厂里面都会有专门的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上面没有线程(或者说线程支持的不够好,所以使用了多进程架构)。


配置文件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 = 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


备份和恢复




参考
  1. PostgreSQL 数据存储目录结构和进程结构
  2. PG的进程架构_murkey的专栏-CSDN博客
  3. 在CentOS 7上安装&配置PostgreSQL 12
  4. PostgreSQL 13.1 手册
  5. Postgresql实现主从复制,读写分离-云社区-华为云
  6. Postgresql主从复制--物理复制 - 云+社区 - 腾讯云
  7. recovery.conf文件详解 - 狂神314 - 博客园
 
友情链接
鄂ICP备19019357号-22