postgresql 服务的启动操作,不再是DBA的专属

news/2024/7/9 22:39:42 标签: 数据库, 服务器, postgresql, linux, sql

 

  • 专栏内容:sql>postgresql
  • 个人主页:我的主页
  • 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

目录

前言

服务架构概述

服务启动流程

前提

流程

集群创建

集群介绍

数据库服务配置

数据库配置

访问权限配置

启动服务

服务说明

测试登陆

结尾


前言

本文是基于sql>postgresql 15的代码进行分析解读,演示是在centos8系统上进行。


服务架构概述

sql>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 sql>postgresql.auto.conf

-rw-------. 1 senllang develops 29441 Jun 10 16:11 sql>postgresql.conf

看这里已经创建了很多文件和文件夹,这里主要讲一下数据库配置文件和权限配置文件。

数据库配置文件在为 sql>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);

可以用啦!


结尾

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!


http://www.niftyadmin.cn/n/422714.html

相关文章

priority_queue的模拟实现

前言 优先级队列听名字好像与队列有关,但是实际上,与队列没有很多关系,它也是容器适配器,是通过vector来适配的,但是里面又加入了堆的调整算法。跟栈和队列又有一些不同,了解它的实现对于我们更好的掌握它是…

算法提高-图论- 最小生成树的扩展应用

最小生成树的扩展应用 最小生成树的扩展应用AcWing 1146. 新的开始AcWing 1145. 北极通讯网络AcWing 346. 走廊泼水节AcWing 1148. 秘密的牛奶运输 最小生成树的扩展应用 AcWing 1146. 新的开始 利用虚拟源点建图和原题的题意是等价的,因此我们使用虚拟源点建图套…

python基本语法知识(三)

函数的相关杂项 例子1:函数多返回值 def test_return():return 1, 2, 3x, y, z test_return() print(x) # 1 print(y) # 2 print(z) # 3例子2:函数参数传递方式 def user_info(name, age, gender):print(f"姓名是:{name}, 年龄是:{age}, 性别是…

深入理解C++中的静态(Static)关键字及其应用场景

目录 引言:静态变量(Static Variables)静态函数(Static Functions)静态类成员(Static Class Members)静态变量与全局变量的区别结论: 引言: 在C中,静态&…

2023最新社交圈子即时聊天通信小程序+前端UNIAPP

🎈 限时活动领体验会员:可下载程序网创项目短视频素材 🎈 🎉 有需要的朋友记得关赞评,阅读文章底部来交流!!! 🎉 ✨ 源码介绍 2023最新多端社交圈子系统源码 | 陌生人社交…

2.3 Android ebpf帮助函数解读(二)---更新中

写在前面: 帮助函数的介绍是根据其引入内核的时间来排序介绍的,从前面包括本篇博客的介绍我们可以看到bpf最初的设计就是为网络而生的。 我们继续来介绍。 24.u32 bpf_get_route_realm(struct sk_buff *skb) 描述:检索realm或route,也就是skb tclassid字段。所检索到的标…

疯狂python笔记--并发编程

单线程编程是一条顺序执行流,从上到下依次执行代码,如果遇到阻塞程序将会停滞在这里。 当然,单线程十分有限,多线程相当于使用多个执行流且互相并不会发生干扰,多线程编程包含有创建、启动线程、控制线程三个方面。 线…

【LeetCode】每日一题 -- 1171. 从链表中删去总和值为零的连续节点 -- Java Version

题目链接:https://leetcode.cn/problems/remove-zero-sum-consecutive-nodes-from-linked-list/ 1. 题解(1171. 从链表中删去总和值为零的连续节点) 2021年字节二面真题 1.1 暴力解法:穷举 时间复杂度 O(n2),空间复杂…