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

男娘i 2023-05-22 06:52 36阅读 0赞

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、本文环境信息与适用范围

  • 环境信息

















软件 版本
CentOS 7.5 Release
PostgreSQL 12.x
  • 适用范围

















软件 版本
CentOS CentOS 7.x
PostgreSQL 9.x-12.x

2、PostgreSQL安装

2.1、导入yum源

  1. 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服务

  1. sudo yum install -y postgresql12 postgresql12-server

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

2.3、初始化数据库

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

2.4、启动PostgreSQL服务

  1. #启动PostgreSQL服务
  2. sudo systemctl start postgresql-12
  3. #设置PostgreSQL服务为开机启动
  4. sudo systemctl enable postgresql-12
  5. #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、开放端口

  1. sudo firewall-cmd --permanent --add-port=5432/tcp
  2. sudo firewall-cmd --permanent --add-port=80/tcp
  3. sudo firewall-cmd --reload

4.2、修改IP绑定

  1. #修改配置文件
  2. vi /var/lib/pgsql/12/data/postgresql.conf
  3. #将监听地址修改为*
  4. #默认listen_addresses配置是注释掉的,所以可以直接在配置文件开头加入该行
  5. listen_addresses='*'

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

4.3、允许所有IP访问

  1. #修改配置文件
  2. vi /var/lib/pgsql/12/data/pg_hba.conf
  3. #设置trust信任和白名单IP
  4. # IPv4 local connections:
  5. host all all 127.0.0.1/32 trust
  6. host all all 192.168.157.1/32(需要连接的服务器IP trust
  7. #在文件尾部加入
  8. host all all 0.0.0.0/0 md5

4.4、重启PostgreSQL服务

  1. #重启PostgreSQL服务
  2. 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服务

  1. #重启PostgreSQL服务
  2. sudo systemctl start postgresql-12
  3. sudo systemctl stop postgresql-12
  4. sudo systemctl restart postgresql-12

5.2 登录

sudo -u postgres psql

5.3 控制台命令

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

5.4 SQL常用命令

  1. # 创建新表
  2. CREATE TABLE user_tbl(name VARCHAR(20), signup_date DATE);
  3. # 插入数据
  4. INSERT INTO user_tbl(name, signup_date) VALUES('张三', '2013-12-22');
  5. # 选择记录
  6. SELECT * FROM user_tbl;
  7. # 更新数据
  8. UPDATE user_tbl set name = '李四' WHERE name = '张三';
  9. # 删除记录
  10. DELETE FROM user_tbl WHERE name = '李四' ;
  11. # 添加栏位
  12. ALTER TABLE user_tbl ADD email VARCHAR(40);
  13. # 更新结构
  14. ALTER TABLE user_tbl ALTER COLUMN signup_date SET NOT NULL;
  15. # 更名栏位
  16. ALTER TABLE user_tbl RENAME COLUMN signup_date TO signup;
  17. # 删除栏位
  18. ALTER TABLE user_tbl DROP COLUMN email;
  19. # 表格更名
  20. ALTER TABLE user_tbl RENAME TO backup_tbl;
  21. # 删除表格
  22. DROP TABLE IF EXISTS backup_tbl;

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

  1. #新建用户
  2. CREATE USER test WITH PASSWORD 'test';
  3. #赋予指定账户指定数据库所有权限
  4. GRANT ALL PRIVILEGES ON DATABASE mydb TO test;
  5. #移除指定账户指定数据库所有权限
  6. 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 条评论,36人围观)

还没有评论,来说两句吧...

相关阅读