Rocky Linux 10.0安装部署PostgreSQL 18数据库
PostgreSQL是一个功能非常强大的、源代码开放的关系型数据库,PostgreSQL被业界誉为“最先进的开源数据库”,主要面向企业复杂查询SQL的OLTP业务场景, 支持NoSQL数据类型(hstore/JSON/XML)https://www.postgresql.org/ftp/source/v18beta1/https://ftp.postgresql.org/pub/source/v18beta1/postgresql-18beta1.tar.gz
vi /etc/selinux/config#SELINUX=enforcing #注释掉#SELINUXTYPE=targeted #注释掉SELINUX=disabled #增加:wq! #保存退出setenforce 0 #使配置立即生效 系统默认使用的是firewall作为防火墙,这里改为nftables防火墙。
systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动systemctl mask firewalldsystemctl stop firewalldyum remove firewalld vi /etc/sysconfig/nftables.conf #编辑防火墙规则,放行22和5432端口 table inet filter { chain input { type filter hook input priority 0; policy drop;
# 允许 ICMP (ping) icmp type { echo-request, echo-reply, destination-unreachable } accept icmpv6 type { echo-request, echo-reply, destination-unreachable } accept
# 允许 SSH 和 PostgreSQL tcp dport { 22,5432 } accept ct state established,related accept # 放行已建立连接 } chain output { type filter hook output priority 0; policy accept; } } :wq! #保存退出
#重新加载规则 nft -f /etc/sysconfig/nftables.conf
#检查规则是否生效 nft list chain inet filter input systemctl restart nftables.service #重新启动
rm -rf /etc/localtime #先删除默认的时区设置ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #替换上海/北京作为默认timedatectl set-local-rtc 0hwclock --systohc -u #系统时钟和硬件时钟同步hwclock --show#同步时间systemctl restart chronydsystemctl enable chronydchronyc makestep #立即校正时间chronyc sources -v #查看同步状态chronyc tracking #查看主同步详情chronyc sourcestats #统计各源稳定性chronyc tracking | grep "Last offset" #验证时间同步精度(包括毫秒级偏移)
这里设置主机名为:pgsqlhostnamectl set-hostname pgsqlvi /etc/hostname #编辑配置文件pgsql #修改localhost.localdomain为opengauss-master:wq! #保存退出
LANG=en_US.UTF-8echo "LANG=en_US.UTF-8" >> /etc/profilesource /etc/profileecho $LANG
yum install e2fsprogs-devel libuuid-devel perl-coreyum install bison tcl tcl-devel perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel libicu-devel openldap-devel python3-devel gcc-c++ openssl-devel cmake gcc* readline-develyum install docbook-dtds docbook-style-xsl libxml2 libxml2-devel libxslt libxslt-devel xmlto perl-XML-SAX mkdir -p /data/server/pgsql #创建安装目录mkdir -p /data/server/pgsql/data #创建数据库存放目录mkdir -p /data/server/pgsql/logs #创建数据库日志存放目录
cd /data/softtar zxvf postgresql-18beta1.tar.gz #解压cd postgresql-18beta1./configure --prefix=/data/server/pgsql --with-openssl --with-pgport=5432 --with-tcl --with-perl --with-python --with-libxml --with-libxslt --with-uuid=e2fs --with-pam --with-ldapgmake world #gmake包括第三方插件全部编译gmake install-world #包括第三方插件全部安装
#创建PostgreSQL运行用户,PostgreSQL不允许使用root用户运行服务groupadd postgres #创建用户组postgresuseradd -g postgres postgres #创建用户postgres,并加入postgres组#设置权限chown postgres:postgres -R /data/server/pgsqlchown postgres:postgres -R /data/server/pgsql/datachown postgres:postgres -R /data/server/pgsql/logs #设置日志目录权限chmod 700 -R /data/server/pgsql/logs #设置日志目录权限
vi /etc/profile #添加export PGHOME=/data/server/pgsqlexport PGDATA=/data/server/pgsql/dataexport PATH=$PATH:$PGHOME/binexport LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH:wq! #保存退出source /etc/profile vi /data/server/pgsql/pgsql.sh#!/bin/bash# 设置 PostgreSQL 安装路径和数据目录PG_BIN="/data/server/pgsql/bin"PG_DATA="/data/server/pgsql/data" # 修改为你的数据目录路径PG_LOG="/data/server/pgsql/logs/pg_server.log" #启动日志路径# 启动 PostgreSQLstart_postgresql() {echo "Starting PostgreSQL..."${PG_BIN}/pg_ctl -D ${PG_DATA} start -l ${PG_LOG} > /dev/null 2>&1if [ $? -eq 0 ]; thenecho "PostgreSQL started successfully."elseecho "Failed to start PostgreSQL."fi}# 关闭 PostgreSQLstop_postgresql() {echo "Stopping PostgreSQL..."${PG_BIN}/pg_ctl -D ${PG_DATA} stop -l ${PG_LOG} > /dev/null 2>&1if [ $? -eq 0 ]; thenecho "PostgreSQL stopped successfully."elseecho "Failed to stop PostgreSQL."fi}# 重启 PostgreSQLrestart_postgresql() {echo "Restarting PostgreSQL..."${PG_BIN}/pg_ctl -D ${PG_DATA} restart -l ${PG_LOG} > /dev/null 2>&1if [ $? -eq 0 ]; thenecho "PostgreSQL restarted successfully."elseecho "Failed to restart PostgreSQL."fi}# 检查 PostgreSQL 状态check_postgresql_status() {${PG_BIN}/pg_ctl -D ${PG_DATA} status -l ${PG_LOG} > /dev/null 2>&1if [ $? -eq 0 ]; thenecho "PostgreSQL is running."elseecho "PostgreSQL is not running."fi}# 根据输入参数执行对应操作case $1 instart)start_postgresql;;stop)stop_postgresql;;restart)restart_postgresql;;status)check_postgresql_status;;*)echo "Usage: $0 {start|stop|restart|status}"exit 1;;esac:wq! #保存退出#添加脚本执行权限chmod +x /data/server/pgsql/pgsql.shsh /data/server/pgsql/pgsql.sh start|stop|restart|status
vi /usr/lib/systemd/system/postgresql.service[Unit]Description=The PostgreSQL Database ServerAfter=syslog.targetAfter=network.target[Service]Type=forkingUser=postgresGroup=postgresExecStart=/data/server/pgsql/bin/pg_ctl start -D /data/server/pgsql/dataExecStop=/data/server/pgsql/bin/pg_ctl stopExecReload=/data/server/pgsql/bin/pg_ctl reload -D /data/server/pgsql/dataTimeoutSec=300[Install]WantedBy=multi-user.target:wq! #保存退出systemctl daemon-reloadsystemctl start postgresqlsystemctl enable postgresqlsystemctl restart postgresqlsystemctl status postgresql
#初始化数据库后,默认会生成一个名为postgres的数据库和一个名为postgres的数据库用户,没有密码。#postgres用户作为数据库的管理员,用来创建其他新的数据库和数据库用户。#切换到操作系统用户postgressu - postgres#进入控制台psql -U postgres -d postgres -h 127.0.0.1 -p 5432参数:-U指定用户,-d指定数据库,-h指定服务器,-p指定端口。#命令简写,当前的Linux系统用户postgres,同时也是PostgreSQL的数据库用户postgres,同时PostgreSQL内部有与当前系统用户同名的数据库postgres#直接使用psql命令即可登录控制台#修改数据库用户postgres的密码为postgresALTER USER postgres WITH PASSWORD 'postgres';postgres=# ALTER USER postgres WITH PASSWORD 'postgres';ALTER ROLEpostgres=#\q #退出控制台
#修改数据库配置文件vi /data/server/pgsql/data/postgresql.confport = 5432max_connections = 3000listen_addresses = '*' #监听本机所有ip,也可以按需设置log_destination = 'csvlog' #日志格式,值为stderr,csvlog,syslog,and eventlog之一logging_collector = on #开启日志功能,默认是off不启用日志log_directory = '/data/server/pgsql/logs/' #日志路径,默认是PGDATA的相对路径,即{PGDATA}/log,可以使用自定义目录#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' #日志文件命名形式,默认为每秒一个文件(postgresql-2023-02-28_231548.log)log_filename = 'postgresql-%d.log' #日志文件命名方式,最多保存一个月的日志#同时要打开log_truncate_on_rotation = on,否则日志以追加的方式显示在后面log_file_mode = 0600 #日志文件权限log_rotation_age = 1d #单个日志文件的生存期,默认1天,在日志文件大小没有达到log_rotation_size时,一天只生成一个日志文件log_rotation_size = 1024MB #单个日志文件的大小,如果时间没有超过log_rotation_age,一个日志文件最大只能到1024M,否则将新生成一个日志文件log_truncate_on_rotation = on #当日志文件已存在时,该配置如果为off,新生成的日志将在文件尾部追加,如果为on,则会覆盖原来的日志log_lock_waits = off #控制当一个会话等待时间超过deadlock_timeout而被锁时是否产生一个日志信息。在判断一个锁等待是否会影响性能时是有用的,缺省是offlog_statement = 'none' # none, ddl, mod, all 控制记录哪些SQL语句,none不记录;ddl记录所有数据定义命令,比如CREATE,ALTER,和DROP 语句;mod记录所有ddl语句,加上数据修改语句INSERT,UPDATE等;all记录所有执行的语句,将此配置设置为all可跟踪整个数据库执行的SQL语句log_duration = on #记录每条SQL语句执行完成消耗的时间,将此配置设置为on,用于统计哪些SQL语句耗时较长log_min_duration_statement = 0 #-1表示不可用,0将记录所有SQL语句和它们的耗时,>0只记录那些耗时超过(或等于)这个值(ms)的SQL语句,log_min_duration_statement会将SQL语句和耗时在同一行记录log_connections = off #不记录连接日志log_disconnections = off #不记录连接断开日志log_line_prefix = '%m [%p] %u %d %r' #日志输出格式,根据需要设置(能够记录时间,用户名称,数据库名称,客户端IP和端口等信息)log_timezone = 'Asia/Shanghai' #日志时区,和服务器设置同一个时区:wq! #保存退出#设置数据库访问权限
vi /data/server/pgsql/data/pg_hba.conf #添加修改# TYPE DATABASE USER ADDRESS METHOD# IPv4 local connections:host all all 127.0.0.1/32 trusthost all all 0.0.0.0/0 md5#所有数据库(all)、所有用户(all)、从本机(127.0.0.1/32)均可免密访问(trust)#从任何ip(0.0.0.0/0 )都需要输入正确的密码(md5)才能访问,ip可按需设置#重启服务,由于当前是在postgres用户下,会提示输入root用户的密码才能重启systemctl restart postgresql#注意在postgres用户下,从本机登录postgres数据库,无论pg_hba.conf文件里面设置的是trust还是md5,均可免密登录。在其他用户(root)下,从本机登录postgres数据库,pg_hba.conf文件里面设置的是trust,免密访问。在其他用户(root)下,从本机登录postgres数据库,pg_hba.conf文件里面设置的是md5,则需要输入数据库用户postgres的密码才能登录。
Windows下PostgreSQL数据库客户端连接工具推荐:DBeaverNavicat for PostgreSQLpgAdmin 4数据库地址:192.168.21.110连接端口:5432数据库名:postgres数据库用户名:postgres数据库用户密码:postgres #创建数据库用户dbuser并设置密码为123456CREATE USER dbuser WITH PASSWORD '123456';#创建数据库testdb,指定所有者为dbuserCREATE DATABASE testdb OWNER dbuser;#设置用户权限,把testdb数据库的所有权限都赋予dbuser,否则dbuser只能登录控制台,没有任何数据库操作权限GRANT ALL PRIVILEGES ON DATABASE testdb to dbuser;#PG日志相关参数log_destination = 'csvlog' #日志格式,值为stderr,csvlog,syslog,and eventlog之一logging_collector = on #启用日志log_directory = 'log' #日志文件存储目录log_filename = 'postgresql-%j.log' #日志文件命名方式,最多保存一年的日志.同时和参数log_truncate_on_rotation = on同时使用,否则日志以追加的方式显示在后面log_truncate_on_rotation = on #是否截断日志文件log_file_mode = 0600 #日志文件权限 log_truncate_on_rotation = on #是否截断日志文件#重点参数说明log_destination = 'csvlog'log_filename = 'postgresql-%j.log'log_truncate_on_rotation = onlog_destination建议设置为csvlog,以便将日志链接到postgresql中查看log_filename 设置日志文件名,需结合log_truncate_on_rotation = on使用,可根据自己的需要调整例如:log_filename = 'postgresql-%i.log' #最多保存12小时的日志,每小时一个文件log_filename = 'postgresql-%h.log' #最多保存24小时的日志,每小时一个文件log_filename = 'postgresql-%w.log' #最多保存一周的日志,每天一个文件log_filename = 'postgresql-%d.log' #最多保存一个月的日志,每天一个文件log_filename = 'postgresql-%j.log' #最多保存一年的日志,每天一个文件log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' #按照时间命令,每天一个文件,并且最多保留1个月的日志 至此,Rocky Linux 10.0安装部署PostgreSQL 18数据库完成。
|
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://www.hqyman.cn/post/12194.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
打赏

微信支付宝扫一扫,打赏作者吧~
休息一下~~
作者:hqy | 分类:Linux | 浏览:20 | 评论:0