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

news2024/11/15 16:00:57

 

  • 专栏内容: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);

可以用啦!


结尾

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

202317读书笔记|《心寂犹似远山火:斋藤茂吉短歌300》——茫茫心海里,孤帆与谁同

202317读书笔记|《心寂犹似远山火:斋藤茂吉短歌300》——茫茫心海里,孤帆与谁同 很高兴周五这一天,之前很粉俳句的时候订阅的书都在今天都上架了,可以一饱眼福了。短歌是日本和歌一种诗体,是由三十一音节组…

YOLOv5/v7 添加注意力机制,30多种模块分析③,GCN模块,DAN模块

目录 一、注意力机制介绍1、什么是注意力机制?2、注意力机制的分类3、注意力机制的核心 二、GCN 模块1、GCN 模块的原理2、实验结果3、应用示例 三、DAN模块1、DAN模块的原理2、实验结果3、应用示例 大家好,我是哪吒。 🏆本文收录于&#xf…

扫雷——C语言实现

扫雷 文章目录 扫雷实现代码什么是扫雷基本功能实现显示选择菜单定义几个二维数组?确定数组大小初始化数组布置地雷打印展示数组排查地雷记录指定区域周围地雷的个数判断排雷成功排查地雷实现代码 基本功能的实现代码和效果展示 拓展功能简化游戏界面改变字体颜色实…

[创业之路-73] :如何判断一个公司或团队是熵减:凝聚力强、上下一心,还是,熵增:一盘散沙、乌合之众?

目录 前言: 一盘散沙、乌合之众: 凝聚力强、上下一心: 一、股权结构与利益分配 一盘散沙、乌合之众 凝聚力强、上下一心 二、组织架构与岗位职责 一盘散沙、乌合之众 凝聚力强、上下一心 三、战略目标 一盘散沙、乌合之众 凝聚力…

碳排放预测模型 | Python实现基于MLP多层感知机的碳排放预测模型(预测未来发展趋势)

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 ![1](https://img-blog.csdnimg.cn/34c113bde2 文章概述 碳排放预测模型 | Python实现基于MLP多层感知机的碳排放预测模型(预测未来发展趋势) 研究内容 这是数据集的链接:https://github.com/…

【伏羲八卦图】(PythonMatlab实现)

目录 1 与达尔文对话 2 与老子对话 2.1 Python实现 2.2 Matlab实现 1 与达尔文对话 140年前,1858年7月1日,达尔文在英伦岛发表了自己有关自然选择的杰出论文。他提出,生物的发展规律是物竞天择。经过物竞,自然界选择并存留最具…

【CAD】【动态块】CAD设置动态块

文章目录 1 CAD的动态块及应用2 块的相关概念2.1 块的相关命令2.1.1 创建块BLOCK2.1.2 插入块INSERT2.1.3 编辑块BEDIT2.1.4 重命名块RENAME 2.2 CAD组(group)和块(block)的区别2.3 “块”(block)和“写块”…

CMake学习(6): 打印日志信息及宏定义

1. message 打印日志 介绍CMake中的调试打印命令Message, 可以为用户显示一条消息,并在终端上打印显示。假如,我们通过File命令对文件进行了搜索,但是不能确定搜索到的文件就是我们需要的文件。此时,可以利用message将搜索到的变…

PS 套索选区工具(2) 多边形套索工具 磁性套索工具使用技巧

上文PS 套索选区工具(1) 套索工具基础使用带大家了解了套索工具的基本操作 这边 我们右键套索工具 它还有个 多边形套索工具 多边形套索工具是用来画直线的 我们选中它 然后 我们鼠标点击一下 然后 移动到指定位置 从你点的位置开始 到结束的地方 就会形成一个直线的选区 点…

SpringBoot项目编译运行时提示“程序包xxx不存在,找不到符号”

今天想要在虚拟机上部署自己的前后端项目,在系统打包时碰到了这个问题,记录一下 1. 项目结构,启动程序再pub-oa-web项目中 2、编译异常报错分析 编译中报错是在其他子项目中都配置了如下代码,导致项目每个子项目都是可执行的&am…

第五章数组

我们之前学习,如果我们存储一个值(或者说只有一个值在改变)那么我们使用变量; 但是如果我们需要存储多个值,因该怎么办呢! 1 数组 1.1 概念 数组Array,标志是[ ] ,用于储存多个相同类型数据的集…

JDBC 连接池 详解(通俗易懂)

目录 一、前言 二、传统连接方式的弊端分析 1.局限性 : 2.几个弊端 : 三、数据库连接池 1.基本介绍 : 2.示意图如下 : 3.连接池种类 : 四、C3P0连接池 0.准备工作 : 1.方式一 —— 程序中指定相关参数 : 2.方式二 —— 通过配置文件 : 五、Druid(德鲁伊…

Vue中如何进行路由懒加载

Vue中如何进行路由懒加载 路由懒加载是一种优化Vue应用程序性能的技术。它可以延迟加载路由组件,从而减少应用程序的初始加载时间,提高应用程序的性能。本文将介绍Vue中如何进行路由懒加载,包括使用Vue异步组件和Webpack代码分割。 使用Vue异…

Docker本地私有仓库、harbor私有仓库部署与管理

目录 一、本地私有仓库1、本地私有仓库简介2、搭建本地私有仓库3、容器重启策略介绍 二、harbor私有仓库部署与管理1、什么是harbor2、Harbor的特性3、Harbor的构成4、harbor部署及配置①部署docker-compose②部署Harbor服务③登录创建项目④登录仓库并上传镜像 5、客户端测试①…

Python 基于 Django 的学生成绩管理系统,可视化界面

1简介 对于学生成绩管理系统,充分运用现代化的信息技术手段,对于学生成绩信息管理发展的趋势就是信息化,信息化时代下的信息管理,需要深化信息管理体制与手段的改革,充分运用信息化手段来全方位的进行学生成绩管理系统…

Vue中如何进行数据响应式更新?

Vue中如何进行数据响应式更新? Vue是一款流行的JavaScript框架,它提供了数据响应式更新的能力,可以让我们轻松地更新数据,并自动更新视图。本文将介绍Vue中如何进行数据响应式更新,包括使用Vue的响应式系统、使用计算…

nacos-sdk-rust binding for Python

广告时间 nacos-sdk-rust-binding-py : nacos-sdk-rust binding for Python with PyO3. Tip: nacos-sdk-python 仓库暂未提供 2.x gRPC 交互模式,为了能升级它,故而通过 ffi 方式调用 nacos-sdk-rust py 包 -> https://pypi.org/project/nacos-sdk-r…

【Java代码的运行过程】 ——每天一点小知识

💧 J a v a 代码的运行过程 \color{#FF1493}{Java代码的运行过程} Java代码的运行过程💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》专栏…

Vue中如何处理日期与时间

Vue中如何处理日期与时间 日期和时间处理是Web应用中常见的需求,Vue作为一款流行的前端框架,提供了很多方便的工具和库,以满足不同业务场景下的需求。本文将介绍如何在Vue中处理日期和时间,包括使用原生JavaScript、Moment.js和D…

useMemo和useCallback

上述代码中,useSate 用于定义了三个状态:supNum、oppNum、x。在组件函数中,我们根据这些状态来计算投票的支持率,并将其渲染到视图中。但是,每次状态变化时,投票支持率的计算都会重新执行,即使其…