准备
安装好系统,我的是 centos stream 9
$ cat /etc/redhat-release CentOS Stream release 9
创建专用用户
groupadd postgres useradd -g postgres postgres echo postgres | passwd --stdin postgres
防火墙和selinux按照需求关闭,我这是测试环境,索性关闭
关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config setenforce 0 # 输入 getenforce 返回 Permissive 则是关闭状态
关闭防火墙
systemctl stop firewalld.service systemctl disable firewalld.service # 查看是否关闭 systemctl status firewalld.service
创建一个postgres安装目录,不建议放在 home 下,往往 home 磁盘比较小
mkdir -p /opt/pgsql chown -R postgres:postgres /opt/pgsql
下载编译安装所需软件
yum install gcc gcc-c++ readline-devel zlib-devel openssl-devel systemd-devel
编译安装
下面所有操作都是在 postgres 用户下执行
su - postgres
下载好安装包
wget https://ftp.postgresql.org/pub/source/v15.1/postgresql-15.1.tar.bz2 # 验证安装包是否完整,查看 md5 值和 sha256 值对的上就可以 md5sum postgresql-15.1.tar.bz2 sha256sum postgresql-15.1.tar.bz2 # 官方 MD5和sha256,通过浏览器直接打开链接也可以看到 curl -v https://ftp.postgresql.org/pub/source/v15.1/postgresql-15.1.tar.bz2.md5 curl -v https://ftp.postgresql.org/pub/source/v15.1/postgresql-15.1.tar.bz2.sha256
解压
tar xf postgresql-15.1.tar.bz2 cd postgresql-15.1/
编译安装
./configure --prefix=/opt/pgsql/postgresql-15.1 --with-openssl --with-zlib --with-systemd --with-readline make make all make check make install # 创建软连接,方便日后升级 ln -sf /opt/pgsql/postgresql-15.1/ /home/postgres/pgsql
初始化并创建数据库
能够正常连接test数据的话就没有问题
# 初始化 /home/postgres/pgsql/bin/initdb -D /opt/pgsql/data # 启动数据库 /home/postgres/pgsql/bin/pg_ctl -D /opt/pgsql/data -l /opt/pgsql/pgsql.log start # 创建数据库 test /home/postgres/pgsql/bin/createdb test # 连接数据test /home/postgres/pgsql/bin/psql test
设置PostgreSQL的环境变量
echo "export PATH=/home/postgres/pgsql/bin:$PATH" >> /home/postgres/.bashrc echo "export LD_LIBRARY_PATH=/home/postgres/pgsql/lib" >> /home/postgres/.bashrc source /home/postgres/.bashrc
开启远程登录
1、修改 postgresql.conf
文件: vim /opt/pgsql/data/postgresql.conf
, 修改listen_addresses的值
#listen_addresses = 'localhost' # what IP address(es) to listen on; listen_addresses = '*'
2、在 pg_hba.conf
文件最后添加如下内容
echo "host all all 0/0 md5" >> /opt/pgsql/data/pg_hba.conf
3、创建需要连接的数据库和用户(也可以用已存在的)
create user appuser with password 'Appuser'; create database mshing owner appuser; grant all privileges on database mshing to appuser;
4、重启数据库
/home/postgres/pgsql/bin/pg_ctl -D /opt/pgsql/data -l /opt/pgsql/pgsql.log restart
5、测试远程连接
$ psql -h 192.168.253.128 -d mshing -U appuser Password for user appuser: psql (15.1) Type "help" for help. mshing=> mshing=> exit # -------- # 未开启远程时直接连接会报错 $ psql -h 192.168.253.128 -d mshing -U appuser psql: error: connection to server at "192.168.253.128", port 5432 failed: 拒绝连接 Is the server running on that host and accepting TCP/IP connections?
远程没问题后就可以愉快的使用图形化工具来玩数据库了。比如:Navicat、DataGrip,还有免费开源好用的DBeaver。
用PostgreSQL自研的pgAdmin也是非常不错的选择。
这些操作下来还是不能连接,可以注意一下防火墙、安全组之类的规则。
使用 systemd 管理服务
sudo vim /etc/systemd/system/postgresql.service sudo chmod 755 /etc/systemd/system/postgresql.service sudo systemctl daemon-reload
内容如下:
[Unit] Description=PostgreSQL database server Documentation=man:postgres(1) After=network-online.target Wants=network-online.target [Service] Type=notify User=postgres Group=postgres ExecStart=/home/postgres/pgsql/bin/postgres -D /opt/pgsql/data ExecReload=/bin/kill -HUP $MAINPID KillMode=mixed KillSignal=SIGINT TimeoutSec=infinity [Install] WantedBy=multi-user.target
接下来就可以愉快的使用systemd来管理PostgreSQL了
systemctl start postgresql.service systemctl restart postgresql.service systemctl stop postgresql.service systemctl status postgresql.service