【kong 2.0.2研究】系列二:在CentOS 7上安装&配置PostgreSQL 12,以支持Kong

1、前言

最近研究Kong,但是发现Kong不支持Mysql(哎,这就是Kong的鸡肋啊,抓紧时间开发个组件支持吧!),只支持
postgres, cassandra, 或者off(不适用数据库,信息记录到内存里).

参考:

https://github.com/Kong/kong/issues/4209

https://github.com/Kong/kong/issues/1867

https://github.com/Kong/kong/issues/4209

好吧,网上查了查资料,自己也记录一下,这里就说怎样安装和使用postgres吧。

1.1、本文主要内容

  • PostgreSQL 12 安装(yum)
  • PostgreSQL 12 基础配置
  • PostgreSQL 12 远程访问配置
  • PostgreSQL 基础管理

1.2、本文环境信息与适用范围

  • 环境信息
软件版本
CentOS7.5 Release
PostgreSQL12.x
  • 适用范围
软件版本
CentOSCentOS 7.x
PostgreSQL9.x-12.x

2、PostgreSQL安装

2.1、导入yum源

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

2.2、安装PostgreSQL服务

sudo yum install -y postgresql12 postgresql12-server

安装PostgreSQL 11就是 yum install postgresql12 postgresql12-server
安装PostgreSQL 9.5就是 yum install postgresql95 postgresql95-server
依此类推

2.3、初始化数据库

sudo /usr/pgsql-12/bin/postgresql-12-setup initdb 
#Initializing database ... OK

2.4、启动PostgreSQL服务

#启动PostgreSQL服务
sudo systemctl start postgresql-12

#设置PostgreSQL服务为开机启动
sudo systemctl enable postgresql-12
#Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.

9.x版本的服务名是postgresql-9.x

3、修改postgres账号密码

PostgreSQL安装成功之后,会默认创建一个名为postgres的Linux用户,初始化数据库后,会有名为postgres的数据库,来存储数据库的基础信息,例如用户信息等等,相当于MySQL中默认的名为mysql数据库。

PostgreSQL数据库创建了一个超级postgres用户作为数据库的管理员,密码随机,所以需要修改密码,方式如下:

3.1 步骤一:登录PostgreSQL

sudo -u postgres psql

进入postgres,提示符变成: postgres=# 

3.2 步骤二:修改登录PostgreSQL密码

postgres=# ALTER USER postgres WITH PASSWORD 'postgres123';
ALTER ROLE
postgres=# \q

 

4、配置远程访问

4.1、开放端口

sudo firewall-cmd --permanent --add-port=5432/tcp  
sudo firewall-cmd --permanent --add-port=80/tcp  
sudo firewall-cmd --reload  

4.2、修改IP绑定

#修改配置文件
vi /var/lib/pgsql/12/data/postgresql.conf

#将监听地址修改为*
#默认listen_addresses配置是注释掉的,所以可以直接在配置文件开头加入该行
listen_addresses='*'

当然,此处‘*’也可以改为任何你想开放的服务器IP 

4.3、允许所有IP访问

#修改配置文件
vi /var/lib/pgsql/12/data/pg_hba.conf

#设置trust信任和白名单IP
# IPv4 local connections:
host    all            all      127.0.0.1/32      trust
host    all            all      192.168.157.1/32(需要连接的服务器IP)  trust


#在文件尾部加入
host  all  all 0.0.0.0/0 md5

4.4、重启PostgreSQL服务

#重启PostgreSQL服务
sudo systemctl restart postgresql-12

配置完成后即可使用客户端进行连接

 

4.5 查看链接状态

netstat -apn | grep 5432

tcp6       0      0 :::5432                 :::*                    LISTEN      -                   
unix  2      [ ACC ]     STREAM     LISTENING     217614522 -                    /tmp/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     217614520 -                    /var/run/postgresql/.s.PGSQL.5432

 

5、Postgre常用命令

5.1 重启PostgreSQL服务

#重启PostgreSQL服务
sudo systemctl start postgresql-12
sudo systemctl stop postgresql-12

sudo systemctl restart postgresql-12

5.2 登录

sudo -u postgres psql

5.3 控制台命令

\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。

5.4 SQL常用命令

# 创建新表 
CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);
# 插入数据 
INSERT INTO user_tbl(name, signup_date) VALUES('张三', '2013-12-22');
# 选择记录 
SELECT * FROM user_tbl;
# 更新数据 
UPDATE user_tbl set name = '李四' WHERE name = '张三';
# 删除记录 
DELETE FROM user_tbl WHERE name = '李四' ;
# 添加栏位 
ALTER TABLE user_tbl ADD email VARCHAR(40);
# 更新结构 
ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;
# 更名栏位 
ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;
# 删除栏位 
ALTER TABLE user_tbl DROP COLUMN email;
# 表格更名 
ALTER TABLE user_tbl RENAME TO backup_tbl;
# 删除表格 
DROP TABLE IF EXISTS backup_tbl;

5.5 用户与访问授权语法示例

#新建用户
CREATE USER test WITH PASSWORD 'test';

#赋予指定账户指定数据库所有权限
GRANT ALL PRIVILEGES ON DATABASE mydb TO test;

#移除指定账户指定数据库所有权限
REVOKE ALL PRIVILEGES ON DATABASE mydb TO test

 

6 问题

6.1 错误:psql: FATAL: Peer authentication failed for user "postgres"

解决办法如下:

1). 运行下面的命令编辑pg_hba.conf文件 sudo vi /var/lib/pgsql/12/data/pg_hba.conf

2). 将

 # Database administrative login by Unix domain socket

local     all      postgres        peer

改为

# Database administrative login by Unix domain socket

local     all     postgres         trust

3). 保存后执行下面的命令重新加载配置文件: sudo /etc/init.d/postgresql reload

6.2 错误:FATAL:  password authentication failed for user "postgres"

错误:

 conn = psycopg2.connect(database="testdb", user="postgres", password="nopasswd", host="127.0.0.1", port="5432")
  File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect
    connection_factory=connection_factory, async=async)
psycopg2.OperationalError: FATAL:  password authentication failed for user "postgres"
FATAL:  password authentication failed for user "postgres"

用jdbc连接Postgresql数据库时经常出现这个错误,这主要是由于用户密码认证方式引起的,Postgresql数据库安装好后默认采用md5密码加密认证方式。
解决方法:
1). 运行下面的命令编辑pg_hba.conf文件 sudo vi /var/lib/pgsql/12/data/pg_hba.conf

2). 将

# IPv4 local connections:
host    all             all             127.0.0.1/32           md5

更改为
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
3). 保存后执行下面的命令重新加载配置文件: sudo /etc/init.d/postgresql reload

 

6.3 错误:psql: FATAL:  Ident authentication failed for user "root"

create index for some fields
psql: FATAL:  Ident authentication failed for user "root"

解决方法:
1). 运行下面的命令编辑pg_hba.conf文件 sudo vi /var/lib/pgsql/12/data/pg_hba.conf

2). 将

# "local" is for Unix domain socket connections only
local   all             all                                    peer            //旧版本该处为ident

更改为
# "local" is for Unix domain socket connections only
local   all             all                                     trust
3). 保存后执行下面的命令重新加载配置文件: sudo /etc/init.d/postgresql reload

 

6.4 错误:psql: FATAL: role root does not exist

在postgresql中创建一个名为root的角色即可:
postgres@debian:~$ createuser root
postgres@debian:~$ psql
psql (9.3.3)
Type "help" for help.

postgres=# \du
List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 long      |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 root      |                                                | {}

创建完角色之后如果出现以下错误:
createdb: database creation failed: ERROR:  permission denied to create database
你需要为postgresql进行一些操作的授权(并非所有用户都经过了创建新数据库的授权。)
在创建角色时就赋予角色一些属性,可以使用下面的方法。 
首先切换到postgres 用户。
 创建角色bella 并赋予其CREATEDB 的权限。
postgres=# CREATE ROLE bella CREATEDB ;
CREATE ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
bella | Create DB, Cannot login | {}
david | | {}
postgres | Superuser, Create role, Create DB, Replication | {}
sandy | | {}


创建角色并赋予多个属性时属性之间要用空格:

postgres=# create role bellaaa CREATEDB  superuser Createrole Replication login;    //要添加的属性一般要包括如下。
CREATE ROLE

postgres=# \du
                              List of roles
 Role name |                   Attributes                    | Member of 
-----------+-------------------------------------------------+-----------
 bella     | Superuser, Create DB, Cannot login              | {}
 bellaa    | Superuser, Create role, Create DB, Cannot login | {}
 bellaaa   | Superuser, Create role, Create DB, Replication| {}
 postgres  | Superuser, Create role, Create DB, Replication  | {}
 root      | Superuser, Create DB                            | {}

6.5 错误:role 'root' is not permitted to log in.

在执行以下操作后提示FATAL: role 'root' is not permitted to log in.

后直接将postgres所有权限都给root后,仍报错

google后,由于create role时不为用户赋予login权限,赋予login权限即可
postgres=# alter user root login;
ALTER ROLE

6.6 错误:FATAL:  database "wangye" does not exist

 没有设置PGDATABASE这个环境变量时,使用psql进行登录,默认的数据库是与操作系统用户名一致的,这时候会报错:
 wangye@selfimpro:~$ psql
psql: FATAL:  database "wangye" does not exist

然后设置(export)环境变量PGDATABASE=testDB,这样就默认登录wangye数据库:

wangye@selfimpro:~$ su postgres
Password:
postgres@selfimpro:/home/wangye$ psql
psql (9.1.14)
Type "help" for help.

postgres@selfimpro:/home/wangye$ createdb wangye -E utf-8
postgres@selfimpro:/home/wangye$ psql wangye
psql (9.1.14)
Type "help" for help.

 

参考:

https://www.runoob.com/postgresql/postgresql-syntax.html

https://ken.io/note/centos7-postgresql12-install-and-configuration

https://blog.csdn.net/wangyezi19930928/article/details/20358369

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值