PostgreSQL安装的后续工作
2020-10-14 09:02 abce 阅读(271) 评论(0) 编辑 收藏 举报
要理解的关键点是,安装后期要做什么是有依赖的:
·依赖于操作系统。比如,windows或linux
·依赖于操作系统的分支。比如,debian或redhat
·依赖于是由软件包还是源码安装
让我们从所有安装都通用的最基本步骤开始,并在此基础上进一步细分。
一个成功安装的postgres,不管版本是什么,都有以下特点:
1.有一个新创建的数据集群
2.有一个被编辑的配置文件pg_hba.conf
3.有一个被编辑的配置文件件postgresql.conf 还有其他配置文件,但我们将从上面这些开始。
$netstat -tlnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 27929/postgres
首先要看的是“Local Address”。注意它说的是127.0.0.1:5432。这意味着服务器当前正在侦听本地主机上的端口5432。但是你需要0.0.0.0:5432,否则无法接受远程连接。使用编辑器,打开文件pg_hba.conf并查看“默认”规则。请注意,配置文件可以位于多个位置,我们将在后面介绍。
注意:将地址(CIDR)设置为0.0.0.0仅用于连接目的。这不是你应该在生产机器上执行的操作。知道一切正常后,应将其限制为尽可能少的允许的连接。
每行的实际“rules”可以从一种Postgres安装类型变化到另一种类型。好消息是RedHat/Centos看起来很相似,并且所有Debian/Ubuntu都拥有自己相似的样式。相关设置位于文件的底部,而上述所有其他内容均为注释文档。
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 peer # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5
查看第一行,其中TYPE是“ local”。只要你可以通过UNIX DOMAIN SOCKETS本地登录,并且以sudo作为超级用户登录,则默认为postgres,则无需密码即可访问服务。
METHOD应该是peer,但是如果它使用其他内容(例如md5),则需要更改字符串。或者,如果对主机上的其他用户帐户特别信任,则可以使用METHOD为trust方式,以允许所有本地登录的UNIX帐户自由访问。
# ATTENTION: # the service must be reloaded for any edits to pg_hba.conf to take effect # $sudo su - postgres $psql -c "select 'hello world' as greetings" greetings ------------- hello world
看第二行,可以看到TYPE是IPV4。除非知道密码,否则此规则以及TYPE IPv6的规则都会阻止localhost登录。
$psql -h localhost -c "select 'hello world' as greetings" Password for user postgres:
因此,让我们为通过UNIX DOMAIN SOCKETS登录的postgres用户分配密码来解决此问题,因为我们已经允许METHOD为peer的登录:
-- -- example invocation, change the password to something real -- ALTER ROLE postgres WITH PASSWORD 'mypassword';
编辑pg_hba.conf需要重新加载配置。
既然本地主机已经可以连接,那么在此示例中,我们使用的是IP v4套接字,我们现在可以继续处理远程连接。
你将需要添加另一个规则,该规则应放在localhost规则之后:
host all all 0.0.0.0/0 md5
也可以为ipv6添加一条规则:
host all all ::0/0 md5
提示:演示的示例规则允许每个人连接到主机。要注意CIDR是加强网络安全的关键。
你的系统应该有个独一无二的配置文件。以下是pg_hba.conf开始的样子:
# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 0.0.0.0/0 md5 # IPv6 local connections: host all all ::1/128 md5 host all all ::0/0 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5
你已经为超级用户添加了密码并更新了配置文件pg_hba.conf,现在该访问另一个配置文件postgresql.conf了。
找到该文件并编辑运行时参数listen_addresses。默认设置禁止远程连接。将值重置为网卡的IP地址或仅使用通配符将使其可访问。
提示:作为postgres,在psql会话中执行以下命令以找到您的配置文件。
登录查看配置文件有哪些:
select distinct sourcefile from pg_settings;
可以将postgres服务绑定到多个IP地址,使用逗号分隔的列表,有些人可能觉得这个很神奇:
listen_addresses = '*' #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart)
另一种更新运行时参数的方法也可以使用SQL语句完成:
postgres=# ALTER SYSTEM SET listen_addresses = '*'; ALTER SYSTEM
最后一步,重新启动服务。
·Redhat发行版要求在管理数据集群之前必须手动创建它们。
·PostgreSQL Debian发行版(包括Ubuntu)会自动创建并启动数据集群。
使用systemd的:
·redhat/centos:
/usr/pgsql-11/bin/postgresql-12-setup initdb systemctl start|stop postgresql-12
·debian/ubuntu:
systemctl restart postgresql
为了管理PostgreSQL服务,Debian派生的Linux发行版包含了一系列命令行工具:
# example CLI # pg_ctlcluster<br />Usage: /usr/bin/pg_ctlcluster <version> <cluster> <action> [-- <pg_ctl options>]
# restarting postgres version 12 on a Debian derived distribution pg_ctlcluster 12 main restart
成功重启服务后,你应该会得到类似于以下内容的结果:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 27929/postgres
最后,可以测试远程连接了。
# # THE REMOTE LOGIN # psql 'host=myhost user=postgres password=mypassword' -c "select 'hello world' as greeetings "
总结一下,就是修改配置文件pg_hba.conf,postgres.conf和执行initdb进行初始化。翻译完了,感觉好啰嗦!