【数据库】PostgreSQL编译安装详细过程
前言
最近被安排做一些安全加固的事情,被分到了几个关于postgresql数据库的问题。关于pg库,我们应该都很熟悉了,项目中经常用到,原先以为下个包就可以直接部署了(当然官网也提供了桌面化安装程序),但是我没有安装linux的桌面化组件,所以只能自己编译安装了。。。。。
准备材料
以为服务器是内网服务器,不能配置yum,也连接不了外网,只能自己离线安装了,安装前需要准备的软件或者rpm包:
- postgresql-10.14.tar.gz
- readline-devel-6.2-11.el7.x86_64.rpm
- zlib-1.2.7-18.el7.x86_64.rpm
- zlib-devel-1.2.7-18.el7.x86_64.rpm
- ncurses-devel-5.9-14.20130511.el7_4.x86_64.rpm
这里我用的是CentOS7的64位系统,如果你是其他系统可以根据这个网址去下载对应的离线包:https://pkgs.org/search, 如果支撑访问外网可以直接使用yum安装,更加方便。
如果不安装这几个包,编译pg的时候会报,缺少readline包等问题。
编译安装
-
上传源码包和rpm包到home目录下
-
安装rpm包,检查是否安装正确
rpm -qa | grep -E 'zlib|readline|ncurses'
-
解压pg源码包
tar -zxvf postgresql-10.14.tar.gz
-
创建安装目录,执行configure 进行平台检测
mkdir pgsql cd postgresql-10.14 ./configure --prefix=/home/pgsql
没有报错则继续往下走
-
执行make编译
使用make world
编译
pg库有很多扩展组件,如果只执行make pg编译会排除这些扩展插件,所以需要使用make world
包含扩展插件
当出现PostgreSQL, contrib, and documentation successfully made. Ready to install.
表示编译成功了。 -
安装
同样安装也是,执行make install-world
会把扩展插件安装上的。
出现PostgreSQL, contrib, and documentation installation complete.
表示安装成功 -
添加用户,用户组
useradd postgres
groupadd postgres
-
生成数据库文件
mkdir /home/pgsql/data
-
权限变更
chown postgres /home/pgsql/data
chgrp postgres /home/pgsql/data
-
数据库初始化
su - postgres
/home/pgsql/bin/initdb -D /home/pgsql/data
这种初始化默认是trust模式,超级账户的密码为空,当然你也可以等初始化完数据库,后面在修改密码,但是如果想在初始化的时候就设置好密码,并修改pg_hba的校验方式,可以使用
initdb -A scram-sha-256 --pwfile /opt/pwd.txt
-A设置校验方式,–pwfile 指定密码文件,注意密码文件第一行写密码执行成功会出现
Success. You can now start the database server using:
/home/pgsql/bin/pg_ctl -D /home/pgsql/data -l logfile start
-
配置数据库允许访问的IP,设置监听地址和端口
vi /home/pgsql/data/pg_hba.conf
追加一条记录:
host all all 0.0.0.0/0 trust
这表示所有数据库的所有用户都可以无密码登录,至于怎么设置这个权限问题,自己设计即可。
在配置一下监听地址和端口,执行`vi /usr/local/postgresql/data/postgresql.conf `
`listen_addresses = '*'`
`port = 5432`
表示端口5432,监听所有地址
然后就可以启动数据库了
- 启动数据库
/home/pgsql/bin/pg_ctl -D /home/pgsql/data -l logfile start
就可以了 - 客户端执行sql文件
pg库提供了客户端的交互方式,执行/bin/psql
文件,psql还提供了可以直接执行sql文件,如果是无密码登录的,可以直接使用
./psql -d postgres -f /opt/initdb.sql
如果是密码登录,则可以使用
PGPASSWORD=密码 psql -d postgres -f /opt/initdb.sql
(前提是把bin目录 导入环境变量)
这样就可以做一些自动化脚本使用了。
- 点赞
- 收藏
- 关注作者
评论(0)