【postgresql 基础入门】数据库服务的管理,启动、停止、状态查看、配置加载、重启都在这里

news2024/11/28 22:53:15

数据库服务管理

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

系列文章

  • 初始化集群
  • 数据库服务管理

一、前言

postgresql 数据库是一款通用的关系型数据,在开源数据库中能与商业数据媲美,在业界也越来越流行。

因为是开源数据库,不仅公开源码,还有很多使用案例,好用的插件,所以它的慢慢变成了数据库的先驱和标准,通过postgresql可以很好从使用到原理,彻底搞懂;

如果是学习编程,也可以学到丰富的编程知识,数据结构,编程技巧,它里面还有很多精妙的架构设计,分层思想,可以灵活定制的思想。

本专栏主要介绍postgresql 入门使用,数据库维护管理,通过这些使用来了解数据库原理,慢慢了解postgresql是什么样的数据库,能做那些事情,以及如何做好服务,最关键的是这些知识都是面试的必备项。

二、概述

本文主要介绍postgresql 数据库服务的启动,查看,停止,以及配置修改后的重新加载。

经常接到开发人员反馈,SQL执行失败了,或者JDBC连不上数据库了,不知道什么原因,有一部分原因其实很简单,数据库服务没有启动。使用数据库,首先是启动数据库服务,或者查看数据库服务是否正常,保证我们后续的使用没有问题。

三、原理

数据库其实也是一个应用软件,不过它机制比较庞大而已,它一般采用C/S架构。

c\s架构

我们使用的图形化客户端或者命令行客户端,都需要网络连接到数据库的服务端,执行的命令也是由客户端发送给服务端执行,再由服务端发送到客户端。

postgresql数据库服务端,采用多进程模式,有主进程进行网络监听服务,每连接一个客户端,都会fork产生一个服务进程;这样每个客户端都有独立的服务进程处理;

四、数据库服务管理命令

数据库服务的管理命令是 pg_ctrl ,先看一下帮助
先进入到安装目录下 /opt/postgres/bin/, 这个路径按自己实际安装路径执行;

[senllang@hatch bin]$ cd /opt/postgres/bin/
[senllang@hatch bin]$ ./pg_ctl --help
pg_ctl is a utility to initialize, start, stop, or control a PostgreSQL server.

Usage:
  pg_ctl init[db]   [-D DATADIR] [-s] [-o OPTIONS]
  pg_ctl start      [-D DATADIR] [-l FILENAME] [-W] [-t SECS] [-s]
                    [-o OPTIONS] [-p PATH] [-c]
  pg_ctl stop       [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
  pg_ctl restart    [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
                    [-o OPTIONS] [-c]
  pg_ctl reload     [-D DATADIR] [-s]
  pg_ctl status     [-D DATADIR]
  pg_ctl promote    [-D DATADIR] [-W] [-t SECS] [-s]
  pg_ctl logrotate  [-D DATADIR] [-s]
  pg_ctl kill       SIGNALNAME PID

Common options:
  -D, --pgdata=DATADIR   location of the database storage area
  -s, --silent           only print errors, no informational messages
  -t, --timeout=SECS     seconds to wait when using -w option
  -V, --version          output version information, then exit
  -w, --wait             wait until operation completes (default)
  -W, --no-wait          do not wait until operation completes
  -?, --help             show this help, then exit
If the -D option is omitted, the environment variable PGDATA is used.

Options for start or restart:
  -c, --core-files       allow postgres to produce core files
  -l, --log=FILENAME     write (or append) server log to FILENAME
  -o, --options=OPTIONS  command line options to pass to postgres
                         (PostgreSQL server executable) or initdb
  -p PATH-TO-POSTGRES    normally not necessary

Options for stop or restart:
  -m, --mode=MODE        MODE can be "smart", "fast", or "immediate"

Shutdown modes are:
  smart       quit after all clients have disconnected
  fast        quit directly, with proper shutdown (default)
  immediate   quit without complete shutdown; will lead to recovery on restart

Allowed signal names for kill:
  ABRT HUP INT KILL QUIT TERM USR1 USR2

Report bugs to <pgsql-bugs@lists.postgresql.org>.
PostgreSQL home page: <https://www.postgresql.org/>

可以看到,主要有几个管理选项

  • init 初始化服务,也就是初始化数据库集群,这在前面已经分享过,这里只是用pg_ctrl来调用而已;
  • start 启动数据库服务
  • stop 停止数据库服务
  • status 查看服务状态
  • restart 重启服务
  • reload 重新加载

五、初始化数据库服务

前面已经介绍过详细的初始化数据库集群,这是另一种命令执行方式,最终还是调用initdb来完成 。

[senllang@hatch bin]$ ./pg_ctl init -D testdemo1
The files belonging to this database system will be owned by user "senllang".
This user must also own the server process.

Using default ICU locale "en_US".
Using language tag "en-US" for ICU locale "en_US".
The database cluster will be initialized with this locale configuration:
  provider:    icu
  ICU locale:  en-US
  LC_COLLATE:  en_US.UTF-8
  LC_CTYPE:    en_US.UTF-8
  LC_MESSAGES: en_US.UTF-8
  LC_MONETARY: en_US.UTF-8
  LC_NUMERIC:  en_US.UTF-8
  LC_TIME:     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 testdemo1 ... 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:

    /opt/postgres/bin/pg_ctl -D testdemo1 -l logfile start

在当前目录下,初始化testdemo1数据库集群目录

六、启动数据库服务

启动数据库服务有两种方式,一种是在直接执行数据库主程序,当前终端退出后,数据库服务也就停止了;另一种是将数据库服务以后台服务形式启动,这样它就不依赖于当前终端了;

  • 后台服务方式启动服务
    这个命令其实在初始化结束时,已经提示了
[senllang@hatch bin]$ ./pg_ctl -D testdemo1 -l logfile start
waiting for server to start.... done
server started

其中参数需要指定

  • -D 数据库集群目录,也就之前初始化的
  • -l 服务启动日志输出的文件

七、查看数据库服务

在使用数据库之前,或者连接数据库失败时,我们首先需要查看数据库服务是否正常。
数据库服务状态的查看方式常用的有几种:

  • 通过服务管理命令查看
  • 通过数据库运行日志查看数据库服务运行情况
  • 通过系统命令查看后进程
  • 通过系统网络命令查看网络监听和连接状态

查看服务状态

通过pg_ctl服务管理命令的 status参数查看,需要指定 -D 集群目录(也可以是PGDATA环境变量代替)

[senllang@hatch bin]$ ./pg_ctl -D testdemo1 status
pg_ctl: server is running (PID: 136824)
/opt/postgres/bin/postgres "-D" "testdemo1"

查看运行日志

运行日志默认是没有输出到文件的,在启动之前需要在配置文件中将参数logging_collector打开,这样我们才可以在文件中进行查看,这个参数变化,需要重启服务

vi testdemo1/postgresql.conf
logging_collector = on 

./pg_ctl -D testdemo1 -l logfile restart 

[senllang@hatch bin]$ cd $PGDATA/log
[senllang@hatch log]$ ll
total 4
-rw-------. 1 senllang develops 616 Sep  3 08:40 postgresql-2023-09-03_084025.log

这样就可以看到log目录,同时已经生成了一个日志文件,文件名默认按照时间来命名,打开可以看到已经启动成功,等待连接的到来;

[senllang@hatch log]$ vi postgresql-2023-09-03_084025.log
2023-09-03 08:40:25.326 CST [148029] LOG:  starting PostgreSQL 16beta1 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-19), 64-bit
2023-09-03 08:40:25.327 CST [148029] LOG:  listening on IPv6 address "::1", port 5433
2023-09-03 08:40:25.327 CST [148029] LOG:  listening on IPv4 address "127.0.0.1", port 5433
2023-09-03 08:40:25.333 CST [148029] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5433"
2023-09-03 08:40:25.339 CST [148033] LOG:  database system was shut down at 2023-09-03 08:39:17 CST
2023-09-03 08:40:25.343 CST [148029] LOG:  database system is ready to accept connections
~
~

查看后台进程

当然也可以通过linux 系统命令查看后台服务进程是否启动,这需要熟悉后台进程

[senllang@hatch bin]$ ps -ef|grep postgres|grep -v grep
senllang  148029       1  0 08:40 ?        00:00:00 /opt/postgres/bin/postgres -D testdemo1
senllang  148030  148029  0 08:40 ?        00:00:00 postgres: logger
senllang  148031  148029  0 08:40 ?        00:00:00 postgres: checkpointer
senllang  148032  148029  0 08:40 ?        00:00:00 postgres: background writer
senllang  148034  148029  0 08:40 ?        00:00:00 postgres: walwriter
senllang  148035  148029  0 08:40 ?        00:00:00 postgres: autovacuum launcher
senllang  148036  148029  0 08:40 ?        00:00:00 postgres: logical replication launcher

可以看到,父进程号1对应的就是数据库服务主进程,pid为148029, 其它都是它的六个子进程

查看网络服务

默认配置下,监听IP为 localhost,端口为 5432,协议采用tcp

[senllang@hatch bin]$ netstat -an |grep tcp|grep 5432
tcp        0      0 127.0.0.1:5432            0.0.0.0:*               LISTEN
tcp6       0      0 ::1:5432                  :::*                    LISTEN

查看网络,可以看到正处于listen状态,如果支持IPv6,可以看到tcp6协议;

八、重新加载配置

在postgresql 的配置中,大致分为需要重启的配置和不需要重启服务的配置;对于不需要重启服务的配置,就可以通过重新加载配置参数,让配置生效;

[senllang@hatch bin]$ ./pg_ctl -D testdemo1 reload
server signaled

可以看到,打印signaled,其它就是给服务主进程发送了一个信号,这就是我的专栏 并发控制中,分享的多任务间通信的一种。

九、停止数据库服务

当数据库服务需要停机维护时,我们先要停止数据库服务,使用stop参数即可;

[senllang@hatch bin]$ ./pg_ctl -D testdemo1 stop
waiting for server to shut down.... done
server stopped

在stop 时,可以用-m 指定采用什么方式停止,可以有三种选项

  • smart 当有客户端连接存在时,会等所有客户端连接断开时,才进行停止;
  • fast 快速停止,当有客户端连接时,会让它们主动断开,并进行服务停止;这也是默认的方式;
  • immediate 这个就是立即停止,可能还有一些任务没有做完,下次启动时会触发恢复;

十、重启数据库服务

当服务启动或没有启动时,都可以采用重启的方式再次启动;

[senllang@hatch bin]$ ./pg_ctl -D testdemo1 restart
waiting for server to shut down.... done
server stopped
waiting for server to start....2023-09-03 09:39:15.106 CST [149106] LOG:  redirecting log output to logging collector process
2023-09-03 09:39:15.106 CST [149106] HINT:  Future log output will appear in directory "log".
 done
server started

可以看到,它其实就是先stop,然后再start服务;

十一、总结

对于数据库服务,一般都是在后台运行,看到不摸不着,很多时间我们都没有注意,但当我们遇到问题时,又一时不知所措,本文的分享希望能带给大家一些帮助,有兴趣的同学可以一起来探讨,在评论区留下你的观点。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

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

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

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

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

相关文章

【精读Uboot】反汇编分析SPL的_main函数

1、简介 典型的Uboot启动分为两个阶段&#xff0c;bootrom->SPL&#xff08;Secondary Program Loader&#xff09;->ATF->OPTEE(可选)->Uboot。其中SPL为BL2&#xff0c;ATF为BL31&#xff0c;OPTEE为BL32&#xff0c;Uboot为BL33。其中bootrom是固化在芯片内部的…

MySQL 8.0.34(x64)安装笔记

一、背景 从MySQL 5.6到5.7&#xff0c;再到8.0&#xff0c;版本的跳跃不可谓不大。安装、配置的差别也不可谓不大&#xff0c;特此备忘。 二、过程 &#xff08;1&#xff09;获取MySQL 8.0社区版&#xff08;MySQL Community Server&#xff09;   从 官网 字样 “MySQL …

3D印刷电路板在线渲染查看工具

从概念上讲&#xff0c;这是有道理的&#xff0c;因为PCB印制电路板上的走线从一个连接到下一个连接的路线基本上是平面的。 然而&#xff0c;我们生活在一个 3 维世界中&#xff0c;能够以这种方式可视化电路以及相应的组件&#xff0c;对于设计过程很有帮助。本文将介绍KiCad…

VsCode Ctrl+.修复无效

vscode 快速修复(quick fix) 快捷键(Ctrl .)被占用问题解决方法_vscode快速修复快捷键_追求者2016的博客-CSDN博客

Android 系统源码目录frameworks/base/packages和packages/apps下的APP区别

概要 在 Android Open Source Project (AOSP) 源代码中&#xff0c;frameworks/base/packages 和 packages/apps 目录都包含 Android 系统中的应用程序&#xff0c;但它们在性质和用途上有一些区别&#xff1a; 1&#xff0c;frameworks/base/packages frameworks/base 目录…

OMRON G9SP和NB触摸屏使用232口通讯

G9SP和NB触摸屏使用232口通讯 实验时间&#xff1a;2023/9/7 实验设备&#xff1a;G9SP-N20S、CP1W-CIF01&#xff08;232串口选减板&#xff09;、NB5Q-TW00B、XW2Z-200T&#xff08;串口线&#xff09;&#xff0c;CP1W-20EDT1&#xff0c;D4GS-N4T&#xff08;安全门开关&a…

alibaba国际版阿里巴巴API接入说明(阿里巴巴商品详情+关键词搜索商品列表)

API地址:https://o0b.cn/anzexi 调用示例&#xff1a;https://api-gw.onebound.cn/alibaba/item_get/?keytest_api_key& &num_iid60840463360&&langzh-CN&secret 参数说明 通用参数说明 url说明 https://api-gw.onebound.cn/平台/API类型/ 平台&#xf…

Golang 方法使用的注意事项和细节

方法的声明(定义) furie (recevier type) methodName (参数列表) (返回值列表){方法体return返回值 } 1)参数列表&#xff1a;表示方法输入 2) recevier type:表示这个方法和type这个类型进行绑定&#xff0c;或者说该方法作用于type类型 3) receiver type:type可以是结构体…

mysql 安全加固

PS&#xff1a;之前在做安全测试的时候&#xff0c;报告mysql有安全漏洞&#xff0c;于是研究了下如何修复&#xff0c;于是记录下来分享给大家 1.1修改mysql 存放位置 修复 1.停服务 service mysqld stop2.迁位置 2.1 新建迁移目录 mkdir /home/database2.2 迁移数据文件…

深入探索KVM虚拟化技术:全面掌握虚拟机的创建与管理

文章目录 安装KVM开启cpu虚拟化安装KVM检查环境是否正常 KVM图形化创建虚拟机上传ISO创建虚拟机加载镜像配置内存添加磁盘能否手工指定存储路径呢&#xff1f;创建成功安装完成查看虚拟机 KVM命令行创建虚拟机创建磁盘通过命令行创建虚拟机手动安装虚拟机 KVM命令行创建虚拟机-…

如何基于国标GB28181视频平台EasyGBS国标云服务平台建设智慧环保在线监测系统

EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的安防视频监控设备通过国标GB/T28181协议进行视频监控直播。基于视频图像的环保监督管理智能监控系统&#xff0c;结合了计算机技术、AI、云计算、网络传输技术和网络存储技术等先进技术&#xff0c;…

CloudQuery X PolarDB:让数据库管理更简单

前言&#xff1a;8 月 15 日&#xff0c;CloudQuery 数据操作管控平台与阿里云 PolarDB 数据库管理软件&#xff0c;完成产品集成认证测试。也在以下功能上完善了用户使用 PolarDB 的体验&#xff0c;使数据库的管理更加安全高效。 支持在 CloudQuery 中创建连接&#xff0c;便…

如何学习python?比较通义千问、文心一言、ChatGPT给的答案,你就知道啦

通义千问 通义千问是阿里巴巴达摩院自主研发的超大规模语言模型&#xff0c;能够回答问题、创作文字&#xff0c;还能表达观点、撰写代码。通义千问的能力覆盖自然语言处理的多个领域&#xff0c;包括语言理解、文本生成、代码写作等。通义千问在多项性能指标上达到了业界领先水…

springcloudSeata处理分布式事务之1.7.0

1.5.0之后版本发生了很大改变 1.seata安装 1.1官网地址 http://seata.io/zh-cn/ 1.2下载地址 https://github.com/seata/seata/releases 下载的是seata-server-1.7.0.zip 1.3seata相关配置的修改 seata-server-1.7.0\seata\conf下的application.yml进行修改 server:por…

香港服务器怎么解除被封ip?

​  解除被封IP的方法因具体情况而异&#xff0c;需要根据实际情况选择合适的解决方案。本文关于香港服务器被封IP的常见解除方法有以下步骤。 第一步&#xff1a;服务器检查 用户需要立即启动服务器进行检查。或提前申请免费试用。如果IP地址被屏蔽&#xff0c;请联系客户服…

E. Data Structures Fan(思维 + 异或前缀和)

Problem - E - Codeforces 给你一个整数数组 a1, a2,..., an&#xff0c;以及一个由 n 个字符组成的二进制字符串† s。 Augustin 是一个数据结构的爱好者。因此&#xff0c;他请你实现一个可以回答 q 个查询的数据结构。这里有两种类型的查询&#xff1a; Plain Text "1…

3次多项式轨迹规划(PLC SCL代码)

机器人、运动控制等常用的轨迹规划有三次多项式、五次多项式、梯形速度规划,S型速度规划,今天我们主要介绍三次多项式轨迹规划,有关T型和S型轨迹规划大家可以查看下面文章博客,这里不再赘述, 梯形轨迹规划 梯形速度曲线轨迹规划(速度前馈+PID、SCL+ ST代码)_RXXW_Dor的博…

c++中的list容器讲解

文章目录 1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.6 list的迭代器失效 2. list的模拟实现2.1 模拟实现list 3. list与vector的对比 1. list的介绍及使用 1.1 list的介绍 …

ONNX OpenVino TensorRT MediaPipe NCNN Diffusers ComfyUI

框架 和Java生成的中间文件可以在JVM上运行一样&#xff0c;AI技术在具体落地应用方面&#xff0c;和其他软件技术一样&#xff0c;也需要具体的部署和实施的。既然要做部署&#xff0c;那就会有不同平台设备上的各种不同的部署方法和相关的部署架构工具 onnx 在训练模型时可以…

基于SpringBoot的摄影跟拍预定管理系统

基于SpringBootVue的摄影跟拍预定管理系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【系统功能】   角色&#xff1a;管理员、用户…