- 专栏内容:postgresql
- 个人主页:我的主页
- 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.
目录
前言
服务架构概述
服务启动流程
前提
流程
集群创建
集群介绍
数据库服务配置
数据库配置
访问权限配置
启动服务
服务说明
测试登陆
结尾
本文是基于postgresql 15的代码进行分析解读,演示是在centos8系统上进行。
postgresql数据库架构,整体是client -server模式:
服务端,由一组服务进程,对数据文件进行管理,对用户发送的SQL执行处理;
客户端,可以是命令行的psql,也可以是调用jdbc, c, odbc等的程序;
客户端与服务端之间通过tcp/ip协议进行通信,当然一个服务端可以同时被多个客户端连接,也可以同时处理多个客户端的请求。
每当一个客户端连接到服务端时,服务端就会启动一个后台服务进程,此进程专门处理这个客户端的请求。所以客户端的连接数量,需要进行限制,避够后台进程数量过多,导致服务端资源不足。
启动数据库服务,需要几个条件:
一、数据库程序安装;
二、数据库集群创建完成;
创建完集群后,就可以启动数据库服务,之后就可以开心的使用数据库了。
当然,上面是使用的默认配置,也可以对集群配置文件进行修改,然后再启动,这样就是你想要的数据库服务。
本机的安装路径在 /opt/postgres/下面,所以后面命令都在此路径下。
调用initdb 就可以创建集群,参数需要指定以下几个:
-D 指定集群的路径,存放数据库文件
-U 指定数据库管理员的用户名,如果不指定,默认为当前系统登陆用户
-W 指定数据库管理员的登陆密码,如果不指定,默认是没有密码
通过查看help了解其它参数。
[senllang@localhost bin]$ /opt/postgres/bin/initdb --help
这里指定集群路径在 ~/test ,其它采用默认。
[senllang@localhost bin]$/opt/postgres/bin/initdb -D ~/test
The files belonging to this database system will be owned by user "senllang".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory /home/senllang/test ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /home/senllang/test -l logfile start
好了,创建完成后,在提示里已经有启动服务的命令了。
当前默认情况下,
最大客户端连接数为100,
共享缓冲区大小为128MB,
登陆权限只能在本机登陆,因为没有密码。
我们先来看一下,刚刚创建的集群,它还冒着新鲜的热气。
[senllang@localhost test]$ cd ~/test/
[senllang@localhost test]$ ls -l
total 56
drwx------. 5 senllang develops 33 Jun 10 16:11 base
drwx------. 2 senllang develops 4096 Jun 10 16:11 global
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_commit_ts
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_dynshmem
-rw-------. 1 senllang develops 5711 Jun 10 16:11 pg_hba.conf
-rw-------. 1 senllang develops 2640 Jun 10 16:11 pg_ident.conf
drwx------. 4 senllang develops 68 Jun 10 16:11 pg_logical
drwx------. 4 senllang develops 36 Jun 10 16:11 pg_multixact
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_notify
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_replslot
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_serial
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_snapshots
drwx------. 2 senllang develops 25 Jun 10 16:11 pg_stat
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_stat_tmp
drwx------. 2 senllang develops 18 Jun 10 16:11 pg_subtrans
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_tblspc
drwx------. 2 senllang develops 6 Jun 10 16:11 pg_twophase
-rw-------. 1 senllang develops 3 Jun 10 16:11 PG_VERSION
drwx------. 3 senllang develops 60 Jun 10 16:11 pg_wal
drwx------. 2 senllang develops 18 Jun 10 16:11 pg_xact
-rw-------. 1 senllang develops 88 Jun 10 16:11 postgresql.auto.conf
-rw-------. 1 senllang develops 29441 Jun 10 16:11 postgresql.conf
看这里已经创建了很多文件和文件夹,这里主要讲一下数据库配置文件和权限配置文件。
数据库配置文件在为 postgresql.conf ,其中常用的几个参数为
连接相关参数,如上图所示:
listen_addresses = 'localhost' ,默认只监听本机,也就是只能用localhost连接,可以改为'*'或你想要的IP
port = 5432
max_connections = 100 最大客户端连接数,默认为100,根据服务器业务和服务器内存资源进行合理配置
共享缓冲区相关参数,如下图所示:
其中最重要的是,
shared_buffers 参数,能直接决定性能和IO频繁程度。
它表示数据块在内存中缓存区的大小,越大缓存的越多,也就与磁盘交互变少,访问内存速度当然就更快一些。
客户端连接访问权限本置文件为 pg_hba.conf 文件。
主要由TYPE, DATABASE, USER,ADDRESS, METHOD五部分来进行配置,
例如配置任意IP网段为 192.168.1 这个网段的客户端可以访问所有数据库,并且只能以postgres用户登陆,同时必须输入密码,因为需要以md5进行校验,可以增加一行。
host postgres all 192.168.1.0/24 md5
到这里,我们可以启动数据库服务了,使用以下命令,其中
-D 指定我们刚创建的集群路径,
-l 指定启动日志输出文件,它仅是启动过程的日志,如果不指定就会输出到标准输出
start 就是启动数据库服务,当然对应的还是stop 是停止服务
/opt/postgres/bin/pg_ctl -D /home/senllang/test -l logfile start
执行后,我们看到以下内容
恭喜你,说明数据库服务已经启动成功!
看看倒底启动了那些服务进程,
可以看到默认情况下,一共启动6个进程,分别为:
postgres 主服务进程,进行监听
checkpointer 保存点创建,定期将数据块刷到磁盘上
background writer 后台刷数据块进程,不定时的将数据块刷到磁盘,减轻缓存替换和集中刷盘的负载
walwriter 对write ahead log的刷盘
autovacuum launcher 后台清理进程的调度进程
logical replication launcher 逻辑复制的调度进程
好了,让我们来试一下吧!
我们用命令行客户端登陆一下,
使用 命令 psql ,参数为
-d 指定登陆的数据库名称,默认创建集群后有一个postgres名称的数据库
-U 指定登陆的用户名
-h 指定数据库服务器的监听IP,localhost可以不用指定
-p 指定数据库服务的监听端口,默认5432可以不用指定
再执行几条SQL看看
创建表
create table student(id integer, name varchar(32), sex char, startSchooltime timestamp);
可以用啦!
作者邮箱:[email protected]
如有错误或者疏漏欢迎指出,互相学习。
注:未经同意,不得转载!