0


Linux安装部署PostgreSQL详细步骤

一、版本和环境

选择要安装的版本进行下载:PostgreSQL: File Browser

我选的版本是:postgresql-14.7.tar.gz 操作系统是:CentOS-stream9

二、安装依赖包

在要安装postgresql数据库的Linux服务器(hostname:hdp001)上执行以下命令安装所需要的依赖包:

yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake

三、安装postgres

1、上传安装包并将postgresql-14.7.tar.gz解压,我是将安装包传的目录/home/appview/dev_package,目录自己决定

[root@hdp001 dev_package]# cd /home/appview/dev_package/
[root@hdp001 dev_package]# ll 
-rw-r--r-- 1 appview appview  29070900  7月  6 16:55 postgresql-14.7.tar.gz
[root@hdp001 pgsql]# pwd

2、解压压缩包

[root@hdp001 pgsql]# tar -zxvf postgresql-14.7.tar.gz 
# 解压过程略过了,太多了

3、进入解压后的文件夹

[root@hdp001 dev_package]# cd postgresql-14.7.
[root@hdp001 postgresql-14.7.]# ls
aclocal.m4  configure     contrib    doc             HISTORY  Makefile  src
config      configure.in  COPYRIGHT  GNUmakefile.in  INSTALL  README

4、编译postgresql源码

[root@hdp001 postgresql-14.7.]# ./configure
​
#############################################################
这里我选择默认的安装目录所有不指定了,默认为/usr/local/pgsql
-–prefix=prefix 安装到prefix指向的目录;
--without-readline 选项的作用是禁用对Readline库的使用,用于命令行编辑和历史记录
我在内网安装的时候通常加上这个,不加的话会报错,无法进行编译下面这个
############################################################
# 以下根据需求自行选择
-–bindir=dir    安装应用程序到dir;默认为prefix/bin
-–with-docdir=dir   安装文档到dir;默认为prefix/doc
-–with-pgport=port  设置默认的服务器端网络连接服务TCP端口号
-–with-tcl  为服务端提供Tcl存储过程支持
-–with-perl 为服务端提供Perl存储过程支持
-–with-python   为服务端提供Python存储过程支持
[root@hdp001 postgresql-14.7.]# make
# 过程略过
[root@hdp001 postgresql-14.7.]# make install
# 过程略过
[root@hdp001 psql]# ls
bin  include  lib  share

四、创建用户组postgres并创建用户postgres

[root@hdp001 postgresql-14.7.]# groupadd postgres
[root@hdp001 postgresql-14.7.]# useradd -g postgres postgres
[root@hdp001 postgresql-14.7.]# id postgres
用户id=1002(postgres) 组id=1002(postgres) 组=1002(postgres)

五、创建postgresql数据库的数据主目录并修改文件所有者

这个数据库主目录是随实际情况而不同,这里我们的主目录是在/pgsql/postgresql/data目录下:

[root@hdp001 postgresql-14.7]# cd /usr/local/pgsql/
[root@hdp001 pgsql]# mkdir data
[root@hdp001 pgsql]# chown -R postgres:postgres /usr/local/pgsql
[root@hdp001 pgsql]# ls -al
[root@hdp001 pgsql]# ls -al
总用量 20
drwxr-xr-x   7 postgres postgres   68  6月 23 00:28 .
drwxr-xr-x. 14 root     root      164  6月 23 00:26 ..
drwxr-xr-x   2 postgres postgres 4096  6月 23 00:26 bin
drwx------  19 postgres postgres 4096  7月  6 16:40 data
drwxr-xr-x   6 postgres postgres 4096  6月 23 00:26 include
drwxr-xr-x   4 postgres postgres 4096  6月 23 00:26 lib
drwxr-xr-x   6 postgres postgres 4096  6月 23 00:26 share

六、配置环境变量

进入/home/postgres目录可以看到.bash_profile文件。

[root@hdp001 pgsql]# cd /home/postgres
[root@hdp001 pgsql]# ls -al
[root@hdp001 postgres]# ll -la
总用量 212
drwx------  4 postgres postgres    165  7月  6 16:39 .
drwxr-xr-x. 5 root     root         50  6月 23 00:28 ..
-rw-------  1 postgres postgres    685  7月  6 16:54 .bash_history
-rw-r--r--  1 postgres postgres     18  2月 15 23:31 .bash_logout
-rw-r--r--  1 postgres postgres    241  6月 23 00:32 .bash_profile
-rw-r--r--  1 postgres postgres    492  2月 15 23:31 .bashrc
drwx------  2 postgres postgres      6  6月 23 00:32 .cache
-rw-------  1 postgres postgres 191649  6月 23 16:12 logfile
drwxr-xr-x  4 postgres postgres     39  5月 30 07:04 .mozilla
-rw-------  1 postgres postgres     84  7月  6 16:46 .psql_history
-rw-------  1 postgres postgres   4016  7月  6 16:39 .viminfo
​
########添加环境变量
[root@hdp001 postgres]# vi .bash_profile 
添加以下内容。
export PGHOME=/usr/local/pgsql
export PGDATA=/usr/local/pgsql/data
PATH=$PATH:$HOME/bin:$PGHOME/bin
保存,退出vi。执行以下命令,使环境变量生效
[root@hdp001 postgres]# source .bash_profile 

七、切换用户到postgres并使用initdb初使用化数据库

[root@hdp001 postgres]# su - postgres
[postgres@hdp001 ~]$ initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
​
The database cluster will be initialized with locale "zh_CN.UTF-8".
The default database encoding has accordingly been set to "UTF8".
initdb: could not find suitable text search configuration for locale "zh_CN.UTF-8"
The default text search configuration will be set to "simple".
#####过程略过
Success. You can now start the database server using:
​
    pg_ctl -D /usr/local/pgsql/data -l logfile start
# 看到这里可以切换到data目录下看看
##########################################################
[postgres@hdp001 ~]$ cd /usr/local/pgsql/data/
[postgres@hdp001 data]$
[postgres@hdp001 data]$
[postgres@hdp001 data]$ pwd
/usr/local/pgsql/data
[postgres@hdp001 data]$
[postgres@hdp001 data]$ ls
base          pg_ident.conf  pg_serial     pg_tblspc    postgresql.auto.conf
global        pg_logical     pg_snapshots  pg_twophase  postgresql.conf
pg_commit_ts  pg_multixact   pg_stat       PG_VERSION
pg_dynshmem   pg_notify      pg_stat_tmp   pg_wal
pg_hba.conf   pg_replslot    pg_subtrans   pg_xact

八、配置服务

修改/usr/local/pgsql/data/目录下的两个文件

postgresql.conf 配置PostgreSQL数据库服务器的相应的参数。

pg_hba.conf 配置对数据库的访问权限。

[postgres@hdp001 data]$ vi postgresql.conf
## 找到以下内容进行修改即可
##########################################################
listen_addresses = '*'                  # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)
########说明
其中,参数“listen_addresses”表示监听的IP地址,默认是在localhost处监听,也就是127.0.0.1的ip地址上监听,只接受来自本机localhost的连接请求,这会让远程的主机无法登陆这台数据库,如果想从其他的机器上登陆这台数据库,需要把监听地址改为实际网络的地址,一种简单的方法是,将行开头的#去掉,把这个地址改为*,表示在本地的所有地址上监听。
[postgres@hdp001 data]$ vim pg_hba.conf
## 找到以下内容进行修改即可,加入host    all             all             127.0.0.1/32            trust
#################################################################################
​
# "local" is for Unix domain socket connections only
local   all             all                                     trust  
# IPv4 local connections:
host    all             all             0.0.0.0/0               trust
host    all             all             127.0.0.1/32            trust  ###新加的
# IPv6 local connections:
host    all             all             ::1/128                 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

说明:local和IPv4、IPv6后面的trust是本地登录或者远程登录不验证密码,如果需要密码验证的把trust改成md5

九、设置PostgreSQL开机自启动

为PostgreSQL的开机自启动脚本,systemctl 的启动文件,一般存放在/etc/systemd/system 或者/usr/lib/systemd/system/文件夹下

我是在/usr/lib/systemd/system/创建一个postgresql.service,并给赋予执行权限,当然开机自启的方式不知这一种

[root@hdp001 system]# cd /usr/lib/systemd/system/
[root@hdp001 system]#
[root@hdp001 system]# vim postgresql.service
[root@hdp001 system]# chmod +x postgresql.service
# 添加以下自动脚本
[Unit]
# 服务名称
Description=postgresql.service
# 在network.target服务之后运行
After=network.target
[Service]
# 服务的类型,常用的有 simple(默认类型) 和 forking。
Type=forking
#运行程序的用户和群组
User=postgres
Group=postgres
# 工作目录
WorkingDirectory=/usr/local/pgsql
# 启动命令
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data
# 重启命令
ExecReload=/usr/local/pgsql/bin/pg_ctl restart -D /usr/local/pgsql/data
# 停止命令
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/bin/data
# 是否给服务分配独立的临时空间,需要
PrivateTmp=true
[Install]
# 列出依赖当前服务的模块
WantedBy=multi-user.target
切换到有权限的的用户执行以下命令
## 重载systemctl服务
[root@hdp001 ~]# systemctl daemon-reload
## 启动postgresql服务
[root@hdp001 ~]# systemctl start postgresql.service
## 查看服务状态
[root@hdp001 ~]# systemctl status postgresql.service
● postgresql.service
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; preset: disabled)
     Active: active (running) since Sat 2024-07-06 16:40:42 CST; 1h 16min ago
    Process: 2394 ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data (code=exited, status=0/SUCCESS)
   Main PID: 2397 (postgres)
      Tasks: 7 (limit: 48581)
     Memory: 26.0M
        CPU: 570ms
     CGroup: /system.slice/postgresql.service
             ├─2397 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
             ├─2400 "postgres: checkpointer "
             ├─2401 "postgres: background writer "
             ├─2402 "postgres: walwriter "
             ├─2403 "postgres: autovacuum launcher "
             ├─2404 "postgres: stats collector "
             └─2405 "postgres: logical replication launcher "
​
7月 06 16:40:42 hdp001 pg_ctl[2397]: 2024-07-06 16:40:42.244 CST [2397] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
7月 06 16:40:42 hdp001 pg_ctl[2398]: 2024-07-06 16:40:42.249 CST [2398] LOG:  database system was interrupted; last known up at 2024-06-23 16:15:01 CST
7月 06 16:40:42 hdp001 pg_ctl[2398]: 2024-07-06 16:40:42.279 CST [2398] LOG:  database system was not properly shut down; automatic recovery in progress
7月 06 16:40:42 hdp001 pg_ctl[2398]: 2024-07-06 16:40:42.280 CST [2398] LOG:  redo starts at 0/1A0C440
7月 06 16:40:42 hdp001 pg_ctl[2398]: 2024-07-06 16:40:42.281 CST [2398] LOG:  invalid record length at 0/1A0DB10: wanted 24, got 0
7月 06 16:40:42 hdp001 pg_ctl[2398]: 2024-07-06 16:40:42.281 CST [2398] LOG:  redo done at 0/1A0DAD0 system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed:>
7月 06 16:40:42 hdp001 pg_ctl[2397]: 2024-07-06 16:40:42.284 CST [2397] LOG:  database system is ready to accept connections
7月 06 16:40:42 hdp001 pg_ctl[2394]:  done
7月 06 16:40:42 hdp001 pg_ctl[2394]: server started
7月 06 16:40:42 hdp001 systemd[1]: Started postgresql.service.
[root@hdp001 ~]#
[root@hdp001 ~]#

十、开始测试

切换为postgres用户,进入客户端:
[root@hdp001 system]# su - postgres
[postgres@hdp001 ~]$ psql
psql (14.7)
Type "help" for help.
​
postgres=#
postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(3 rows)
# 创建用户并设定密码
postgres=#create user hive with password  'Psbc@2025';
CREATE ROLE
# 创建数据库指定属组
postgres=# create database hivemeta_db   owner hive;
CREATE DATABASE
# 授权
postgres=# grant all privileges on  database hivemeta_db   to hive ;
GRANT
postgres=#
#显示数据库
postgres=# \l
                                    List of databases
      Name      |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
----------------+----------+----------+-------------+-------------+-----------------------
 hivemeta_db    | hive     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =Tc/hive             +
                |          |          |             |             | hive=CTc/hive
 postgres       | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
 template0      | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
                |          |          |             |             | postgres=CTc/postgres
 template1      | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
                |          |          |             |             | postgres=CTc/postgres
(54rows)
# 退出
postgres=# \q

看到以上内容说明数据库已经安装完成了

仅作为个人学习记录分享,后期有时间继续分享postgres、elasticsearch等数据迁移,也好久没有写博客了,主要是项目比较忙,加班多,没有精力了^~^!!!

标签: linux postgresql 运维

本文转载自: https://blog.csdn.net/2301_77356579/article/details/140233622
版权归原作者 ShoShin1020 所有, 如有侵权,请联系我们删除。

“Linux安装部署PostgreSQL详细步骤”的评论:

还没有评论