Linux 安装 PostgreSQ
Linux 安装 PostgreSQ
按照官网介绍,选择平台和版本,复制命令
PostgreSQL:Linux 下载(Red Hat 系列)
官方命令如下:
# 官网下载较慢, 使用下面的镜像源更好
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
使用国内镜像源:
sudo yum install -y https://mirrors.aliyun.com/postgresql/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
1. 安装命令如下:
# 添加PostgreSQL仓库,替换成上面的国内镜像源
sudo yum install -y https://mirrors.aliyun.com/postgresql/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PostgreSQL
sudo yum install -y postgresql12-server
# 初始化数据库并启用自动启动
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl enable postgresql-12
sudo systemctl start postgresql-12
2. 修改端口监听配置,版本为 12
vim /var/lib/pgsql/12/data/postgresql.conf
修改 ip 地址限制和端口如下(这两行前面的注释取消掉):
3. 修改连接权限
vim /var/lib/pgsql/12/data/pg_hba.conf
在末尾加上一行,支持远程连接
host all all 0.0.0.0/0 md5
调整本地连接数据库的方式,把 # IPv4 local connections
下面这一行最后的方法改为 md5
4. 重启服务
sudo systemctl restart postgresql-12
5. 配置账号密码,并创建数据库
su - postgres
psql -p 5432 -U postgres
CREATE USER <user> WITH PASSWORD '<password>';
ALTER USER <user> LOGIN;
# 创建数据库
CREATE DATABASE <database> OWNER <user>;
\q
exit
6. 登录数据库执行初始化脚本(如果有)
su - postgres
psql -U postgres -d <database> -f /home/init_sql.sql
\q
exit
记一次不同目录下执行脚本出现权限问题,更改了所有者也没有效果,原因就是 SELinux 策略
查看 SELinux 上下文: ls -Z /home/init_sql.sql
输出结果 #可以执行: -rw-r--r--. root root unconfined_u:object_r:home_root_t:s0 /home/init_sql.sql #权限不足:-rwxr-xr-x. root root unconfined_u:object_r:user_home_t:s0 /home/init_sql.sql
解释:
home_root_t 表示该文件属于类型 home_root_t,这是为系统管理员(root 用户)的主目录设置的类型。 由于该文件的类型是 home_root_t,它通常允许 root 用户执行该文件,因为 SELinux 策略对于 root 用户的主目录通常比较宽松。
user_home_t 表示该文件属于类型 user_home_t,这是为普通用户主目录设置的类型。
该文件虽然具有
-rwxr-xr-x
的传统 Unix 权限,允许所有用户读取和执行,但由于其 SELinux 类型为user_home_t
,SELinux 策略可能会限制非所有者用户执行该文件。
7.检查端口和防火墙
检查是否有规则阻止了特定端口的流量:
sudo iptables -nvL --line-numbers | grep ":5432"
直接查看数据库端口是否开放:
sudo firewall-cmd --zone=public --query-port=5432/tcp
手动添加端口规则:
sudo firewall-cmd --permanent --zone=public --add-port=5432/tcp
重新加载 firewalld 以应用更改:
sudo systemctl reload firewalld
再次执行命令检查更改是否生效:
sudo firewall-cmd --zone=public --query-port=5432/tcp