分别用yum命令和离线两种方式安装PostgreSQL 12.4,且对.bash_profile和.bashrc在系统中的应用作用做了说明。
也表述了PostgreSQL数据库的pg_hba.conf配置文件各项参数的含义。
虚拟机环境:虚拟机CentOS 7.8, postgresql-12.4.tar.gz
本地环境:Windows 10,pgadmin 4
目录
1.4 配置pg_hba.conf与postgresql.conf监听
2.9 配置pg_hba.conf与postgresql.conf监听
1 使用yum存储库安装
1.1 官网选择对应系统和安装版本
https://www.postgresql.org/download/linux/redhat/
1.2 postgreSQL安装
安装存储库RPM
[root@skycloud ~]# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
安装PostgreSQL
[root@skycloud ~]# yum install -y postgresql12-server
初始化数据库与自启动
[root@skycloud ~]# /usr/pgsql-12/bin/postgresql-12-setup initdb
[root@skycloud ~]# systemctl enable postgresql-12
[root@skycloud ~]# systemctl start postgresql-12
1.3 配置用户
(1)安装完之后,默认已经创建postgres系统用户,用于执行PostgreSQL,修改其密码
[root@skycloud skycity]# passwd postgres
(2)切换到postgres用户,提示符变更为“-bash-4.2$”,同时数据库中也会生成一个名为“postgres”的数据库用户,且密码已自动生成。
(3)PostgreSQL在数据库用户同名的系统账号下登录免密,进入后可修改数据库密码
[root@skycloud ~]# su postgres
bash-4.2$ psql -U postgres
postgres=# alter user postgres with password '123456';
1.4 配置pg_hba.conf与postgresql.conf监听
(1)找到/var/lib/pgsql/12/data下pg_hba.conf,修改其内容
bash-4.2$ vim /var/lib/pgsql/12/data/pg_hba.conf
加入内容
(2) 修改/var/lib/pgsql/12/data下postgresql.conf,监听地址为*,端口为5432
bash-4.2$ vim /var/lib/pgsql/12/data/postgresql.conf
(3)重启postgresql-12服务
切换到root账户,重启服务
[root@skycloud ~]# systemctl restart postgresql-12
1.5 远程pgadmin登陆
在windows端打开pgadmin,准备连接到linux中的postgres
保存后,连接成功
2 本地离线安装
2.1 删除已安装的postgres
检查本机是否已安装postgres
# 检查PostgreSQL 是否已经安装
[root@skycloud ~]# rpm -qa | grep postgres
# 检查PostgreSQL 安装位置
[root@skycloud ~]# rpm -qal | grep postgres
若已经安装,停止pg服务,使用rpm -e卸载
[root@skycloud ~]# systemctl stop postgresql-12.service
[root@skycloud ~]# rpm -e postgresql12-server-12.4-1PGDG.rhel7.x86_64 postgresql12-libs-12.4-1PGDG.rhel7.x86_64 postgresql12-12.4-1PGDG.rhel7.x86_64
手动删除文件/usr/pgsql-12
[root@skycloud ~]# rm -rf /usr/pgsql-12/
删除postgres用户和文件信息
[root@skycloud lib]# userdel -r postgres
若进程在使用,使用kill -9 xxxxx杀死进程
删除postgres用户组
[root@skycloud skycity]# groupdel postgres
2.2 下载解压postgreSQL安装
在 https://www.postgresql.org/ftp/source 下载postgres12.4安装包,拷贝至centos下usr/local/src并解压
[root@skycloud src]# tar -zxvf postgresql-12.4.tar.gz
[root@skycloud src]# ll postgresql-12.4
查看INSTALL内容,包含安装步骤
[root@skycloud src]# info postgresql-12.4/INSTALL
2.3 configure安装环境检测
解压文件包含configure执行文件,用于检测系统安装环境。检测完后,configure程序还会帮助我们创建GNUmakefile或makefile文件,这是一个用于宏编译的文件,简单来说就是能够帮我们自动操作许多编译步骤的脚本文件。
运行configure程序,并且加上—prefix参数,用于指定软件安装的位置,这里安装目录为/usr/local/pgsql:
[root@skycloud postgresql-12.4]# ./configure --prefix=/usr/local/pgsql
提示error
原因:readline , readline-dev缺少,或者使用--without-readline 选项关闭 readline 功能。但是readline 也就是命令行编辑,关闭的话,你直接用psql 就不能编辑命令行,如果输错指令,不能回滚命令历史记录,只能手工重新输入。
检查系统时候是否已安装readline包,提示已安装
[root@skycloud postgresql-12.4]# rpm -qa | grep readline
通过 yum 搜索相关的 readline 包
[root@skycloud postgresql-12.4]# yum search readline
提示需要readline-devel,可能与这个包有关
两种方式,在线使用yum执行
[root@skycloud postgresql-12.4]# yum -y install -y readline-devel
另一种离线下载readline-devel,手动安装。
在 http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ 搜索得到
readline-devel-6.2-11.el7.x86_64.rpm
ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
[root@skycloud postgresql-12.4]# rpm -ivh /usr/local/src/ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
[root@skycloud postgresql-12.4]# rpm -ivh /usr/local/src/readline-devel-6.2-11.el7.x86_64.rpm
再执行/configure,又报error:zlib library not found
继续找到包 zlib-devel-1.2.7-18.el7.x86_64.rpm ,拷贝安装后终于无错
[root@skycloud postgresql-12.4]# rpm -ivh /usr/local/src/zlib-devel-1.2.7-18.el7.x86_64.rpm
[root@skycloud postgresql-12.4]# ./configure --prefix=/usr/local/pgsql
且生成了GNUmakefile文件
2.4 编译
使用make命令进行编译
[root@skycloud postgresql-12.4]# make clean;make
等待几分钟完成了,等待安装。
2.5 安装
使用make insatall命令执行安装
[root@skycloud postgresql-12.4]# make install
查看在usr/local预设值的安装目录pgsql
2.6 创建postgres用户与数据库data目录
创建postgres组与postgres用户
[root@skycloud skycity]# groupadd postgres
[root@skycloud skycity]# useradd -g postgres -m postgres
[root@skycloud skycity]# passwd postgres
在/usr/local/pgsql下创建data文件夹,并将其权限授予postgrs
[root@skycloud skycity]# mkdir -p /usr/local/pgsql/data
[root@skycloud pgsql]# chown postgres:postgres /usr/local/pgsql/data/
2.7 配置环境变量
切换到postgres用户,在家目录下,编辑.bashrc
[root@skycloud pgsql]# su postgres
[postgres@skycloud pgsql]$ cd ~
[postgres@skycloud ~]$ ll -a
[postgres@skycloud ~]$ vim .bashrc
加入如下语句,保存退出
PGHOME=/usr/local/pgsql
PGDATA=/usr/local/pgsql/data
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
export PGHOME PGDATA PATH
使其生效
[postgres@skycloud ~]$ source .bashrc
2.8 初始化数据库
初始化数据库
[postgres@skycloud ~]$ initdb
启动数据库
[postgres@skycloud ~]$ pg_ctl start
设置postgres密码
[postgres@skycloud ~]$ psql -U postgres
2.9 配置pg_hba.conf与postgresql.conf监听
找到/usr/local/pgsql/data下pg_hba.conf,修改其内容
[postgres@skycloud ~]$ vim /usr/local/pgsql/data/pg_hba.conf
加入内容
找到/usr/local/pgsql/data下postgresql.conf,监听地址为*,端口为5432
[postgres@skycloud ~]$ vim /usr/local/pgsql/data/postgresql.conf
重启postgresql服务
[postgres@skycloud ~]$ pg_ctl restart
2.10 开机启动
拷贝源安装包下postgres-12.4/contrib/start-scripts/linux至etc/init.d中,并命名为postgresql。检查修改其中的路径与实际相符合,并添加执行权限
[root@skycloud pgsql]# cp /usr/local/src/postgresql-12.4/contrib/start-scripts/linux /etc/init.d/postgresql
[root@skycloud pgsql]# vim /etc/init.d/postgresql
[root@skycloud pgsql]# chmod +x /etc/init.d/postgresql
加入开机启动
[root@skycloud pgsql]# chkconfig --add postgresql
[root@skycloud pgsql]# chkconfig postgresql on
[root@skycloud pgsql]# systemctl start postgresql.service
[root@skycloud pgsql]# systemctl status postgresql.service
[root@skycloud pgsql]# systemctl enable postgresql.service
2.11 远程pgadmin登录
在windows端打开pgadmin,准备连接到linux中的postgres
保存后,连接成功
3 bash_profile和.bashrc的区别
- /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
- /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
- ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
- ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.
- ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
4 pg_hba.conf 配置参数
pg_hba.conf位于pg数据库安装目录的data下,控制着客户端的访问与认证,其配置如下
内容对应配置文件中的TYPE、DATABASE、USER、ADDRESS、METHOD。在修改pg_hba.conf文件前做好备份,然后pg_ctl reload。
4.1 TYPE
定义了多种连接PostgreSQL的方式,包括local、host、hostssl、hostnossl
连接方式 | 作用 | 说明 |
---|---|---|
Local | 只允许本地客户端登录
| 这条记录匹配企图使用 Unix 域套接字的连接。 如果没有这种类型的记录,就不允许 Unix 域套接字连接。 |
host | 允许远程客户端登录 | 这条记录匹配企图使用 TCP/IP 建立的连接。 host记录匹配SSL和非SSL的连接尝试, 此外还有GSSAPI 加密的或non-GSSAPI 加密的连接尝试 注意:除非服务器带着合适的listen_addresses配置参数值启动,否则将不可能进行远程的 TCP/IP 连接,因为默认的行为是只监听在本地环回地址localhost上的 TCP/IP 连接。 |
hostssl | 允许经过ssl加密的连接 | 这条记录匹配企图使用 TCP/IP 建立的连接,但必须是使用SSL加密的连接。 要使用这个选项,编译服务器的时候必须打开SSL支持。此外,在服务器启动的时候必须通过设置ssl配置参数(详见第 18.9 节)打开SSL。否则,hostssl记录会被忽略,并且会记录一个警告说它无法匹配任何连接。 |
hostnossl | 允许未经过ssl加密的连接 | 这条记录的行为与hostssl相反;它只匹配那些在 TCP/IP上不使用SSL的连接企图。 |
4.2 DATABASE
指定记录所匹配的数据库名称
值 | 作用 | 说明 |
all | 允许连接所有数据库 | 指定该记录匹配所有数据库 |
sameuser | 允许特定用户连接数据库 | 指定如果被请求的数据库和请求的用户同名,则匹配 |
samerole | 允许特定角色用户连接数据库 | 指定请求的用户必须是一个与数据库同名的角色中的成员(samegroup是一个已经废弃了,但目前仍然被接受的samerole同义词) |
replication | 允许复制连接的请求,如果存在两个需要同步的数据库,那么需要设置replication值 | 指定如果一个物理复制连接被请求则该记录匹配(注意复制连接不指定任何特定的数据库) |
在其它情况里,这就是一个特定的PostgreSQL数据库名字。 可以通过用逗号分隔的方法指定多个数据库,也可以通过在文件名前面放@来指定一个包含数据库名的文件。
4.3 USER
指定这条记录匹配哪些数据库用户名,即设置允许登录的数据库用户
- all:允许所有用户连接
- 一个用户名,一组用户名 ,多个用户时,可以用 , 逗号隔开
- 或者在用户名称前缀(+) ;在USER和DATABASE字段,也可以写一个单独的
- 文件名称用 `@` 前缀,该文件包含数据库名称或用户名称
4.4 ADDRESS
指定这个记录匹配的客户端机器地址。可以是一个主机名、一个 IP 地址范围或下文提到的特殊关键字之一,即主机名称、IP/32(IPV4)、IP/128(IPV6)
一个以点号(.)开始的主机名声明匹配实际主机名的后缀。 因此.example.com将匹配foo.example.com(但不匹配example.com)。
设置格式为:xxx.xxx.xxx.xxx/n,其中/后的n表示子网掩码。如192.168.6.1/32,表示IP为192.168.6.1,子网掩码为255.255.255.255;192.168.6.0/24表示子网掩码为255.255.255.0,此时允许192.168.6.0-192.168.6.255范围内的客户端地址链接。
4.5 METHOD
指定当一个连接匹配这个记录时,要使用的认证方法。常用的方法有trust、reject、md5、password。
方法 | 说明 |
trust | 无条件地允许连接。这种方法允许任何可以与PostgreSQL数据库服务器连接的用户以他们期望的任意PostgreSQL数据库用户身份登入,而不需要口令或者其他任何认证。 |
reject | 无条件地拒绝连接。这有助于从一个组中“过滤出”特定主机,例如一个reject行可以阻塞一个特定的主机连接,而后面一行允许一个特定网络中的其余主机进行连接。 |
md5 | 执行SCRAM-SHA-256或MD5认证来验证用户的口令。 |
password | 要求客户端提供一个未加密的口令进行认证。因为口令是以明文形式在网络上发送的,所以不应该在不可信的网络上使用这种方式。 |
ident | 通过联系客户端的 ident 服务器获取客户端的操作系统名,并且检查它是否匹配被请求的数据库用户名。Ident 认证只能在 TCIP/IP 连接上使用。当为本地连接指定这种认证方式时,将用 peer 认证来替代。 |
peer | 从操作系统获得客户端的操作系统用户,并且检查它是否匹配被请求的数据库用户名。这只对本地连接可用。 |
例子
(1)指定固定地址的所有数据库和用户
# TYPE DATABASE USER ADDRESS METHOD
host all all 10.10.56.17/32 md5
表示允许IP地址为10.10.56.17的所有用户可以通过MD5的密码验证方式连接主机上所有的数据库
(2)指定数据库名称和用户
# TYPE DATABASE USER ADDRESS METHOD
host test pgtest 10.10.56.17/32 md5
表示允许地址为 10.10.56.17 的用户 pgtest通过 MD5方式 加密的密码方式连接主机上的 test 数据库
(3)指定整个网段
# TYPE DATABASE USER ADDRESS METHOD
host test pgtest 0.0.0.0/0 md5
表示允许 任意iP 通过用户名为 pgtest 和md5的 密码 验证方式连接主机上 test 的数据库
(4)不进行密码验证
# TYPE DATABASE USER ADDRESS METHOD
host test pgtest 0.0.0.0/0 trust
表示任意IP地址的用户 pgtest 无需密码验证可直接连接访问该主机的 test 数据库
参考
http://www.postgres.cn/docs/12/
https://zhuanlan.zhihu.com/p/81814954
https://blog.csdn.net/yaoqiancuo3276/article/details/80404883
https://www.cnblogs.com/kevingrace/p/8072860.html