我们已经初步配置好了pg,并在root账户下,使用postgres这个账户在本地登录了pg数据库。
下面我们配置远程登录。
之前先解决一个psql命令别名的问题。
一、【准备工作1】postgreSQL 11后环境变量配置
- 在/etc/profile.d/目录下创建一个postgres.sh文件
- vi /etc/profile.d/postgres.sh
- 输入以下
export PGHOME=/usr/pgsql-11
export PGDATA=/var/lib/pgsql/11/data/
export PATH=$PGHOME/bin:$PATH
- 重启服务器
二、【准备工作2】CentOS7.4 alias别名配置
- cd ~
- ls -a 找到.bashrc文件
- vi .bashrc
- 添加
alias psql=/usr/pgsql-11/bin/psql
- 使命令生效
source .bash_profile
这样就可以随时使用psql命令了
三、查看数据库信息
查看数据版本
pg_config --version
四、创建数据库
- 创建数据库用户
- 数据库超级管理员登录
- su postgres
- 创建用户
postgres=# create user username with password '****'; CREATE ROLE postgres=#
需要注意:
1)要以英文分号结尾
2)密码需要引号包裹
- 这里新增了一个testadm用户,但并没有用户权限(即没有赋予角色)
2.创建数据库
- postgres=# create database dbtest owner username; -- 创建数据库指定所属者 CREATE DATABASE postgres=#
- 此处创建了一个testdb数据库,并指定所属者是testadm
3.将数据库得权限,全部赋给某个用户
- postgres=# grant all on database dbtest to username; -- 将dbtest所有权限赋值给username GRANT postgres=#
- 此时,有了一个真正的数据库(testdb)存在,这个数据库也有一个用户testadm
五、配置远程登录PG
【注意】PostgreSQL安装完成后是不能从本机之外的机器连接的
1.退出postgres用户
- 输入q 退出postgres用户,显示如下
2.尝试用新用户登录testdb数据库
- 输入
psql -U testadm -h localhost testdb
【报错】
- 这个报错和IPv6有关。
3.配置pg_hba.conf文件
- vi /var/lib/pgsql/11/data/pg_hba.conf
- 去掉IPv6连接的注释(这里比较奇怪)
- 重启服务
- systemctl restart postgresql-11
- 再次输入如下,连接数据库
psql -U testadm -h localhost testdb
【报错】如下:
- 这个报错是和认证方式有关的,之前分析过的,默认是ident认证。但我们并没有配置ident认证。
4.【测试1】再次pg_hba.conf文件
- vi /var/lib/pgsql/11/data/pg_hba.conf
- 把IPv6这行配置改成md5认证,如下图
- 重启服务
- systemctl restart postgresql-11
- 再次输入如下,连接数据库
psql -U testadm -h localhost testdb
- 登录成功
- 这里有点邪门,这意味着是以IPv6地址登录
5.【测试2】再次pg_hba.conf文件
- vi /var/lib/pgsql/11/data/pg_hba.conf
- 把IPv4这行配置改成md5认证,IPv6认证这行仍然是ident试试,如下图
- 重启服务
- systemctl restart postgresql-11
- 再次输入如下,连接数据库
psql -U testadm -h localhost testdb
【报错】如下
- 这里有点邪门,这意味着只允许了IPv4地址登录。原因在那里呢?
【原因】经过查资料和分析,发现CentOS系统默认会把localhost解析成IPv6地址,所以pg数据库默认也会认为是一个IPV6链接
6.【解决】CentOS优先使用IPv6改为优先使用IPv4
- 有个配置文件 /etc/gai.conf,这个文件默认不存在的,需要自己创建。
- cd /etc
- vi gai.conf
- 添加 precedence ::ffff:0:0/96 100
- 保存,退出,并重启网卡
7. 再次本地连接tesdb数据库
- 此时的pd_hba.conf是这样配置
- 直接将IPv6连接禁止了。
- 输入
psql -U testadm -h localhost testdb
- 【成功】
现在我们有了一个实际的数据库,也有了数据库用户,实现了本地连接。
下一步,我们要配置数据库的远程连接。