您的位置:首页 > 数据库

PostgreSQL在RHEL5上的安装和简单使用

2016-06-16 16:42 666 查看
PostgreSQL在RHEL5上的安装和简单使用
背景

安装PostgreSQL
使用源码在RHEL安装PostgreSQL

使用rpm packages安装PostgreSQL
推荐的安装方式

有CN特色的安装方式

简单配置PostgreSQL

客户端访问PostgreSQL Server
通过客户端连接PostgreSQL

总结

PostgreSQL在RHEL5上的安装和简单使用

背景

第一次听说PostgreSQL是在很多年以前了,maybe是在大学的时候第一次看到,记得最清晰的一次印象是跟老大一起在上海的时候,他说他们公司用的是PostgreSQL,说是性能还是很好的,之所以说到性能,是因为我们公司当时用的是DB2 Enterprise。

后来每次说起PostgreSQL,我都是敷衍说:据说跟MySQL的语法非常类似。但是,从来也没有一个机会真正接触这个开源的数据库,也许是我接触的公司都比较有钱,不屑于使用开源的数据库吧!

Ok, let’s back to our main topic!

这次在测试中需要使用PostgreSQL来验证某一具体功能是否正确,需要使用较为新一点的版本,因此就借此机会:

- 安装和配置PostgreSQL;

- 学习一些基本的用法。

安装PostgreSQL

先是凭着直觉去了PostgreSQL的官网 翻了翻文档,下载了两个比较常用版本的Manual,然后刚要着手安装,却发现需要使用源码编译的方式!

使用源码在RHEL安装PostgreSQL

我其实并不排斥使用源码编译并安装应用,只是觉得这个方式比较慢,且容易出错(对我而言),如果有更好的alternative approach,我当然不会使用源码来安装它。

这里不介绍太多,如果需要的话,大家可以自行下载PostgreSQL Manual文档,里面大概第15章有较为详细的介绍,不再赘述了。

使用rpm packages安装PostgreSQL

尽管PostgreSQL官网没有明显的链接,随便一个搜索引擎就能很容易搜索到这样一个网站PostgreSQL RPM很明显,这个是PostgreSQL官网下的一个二级网站,费解的是不知道为什么没有放到明显的位置,不知道是否源码编译方式是否能够更有效地利用系统资源(猜测)。

下面介绍如何使用rpm packages在RHEL5上安装PostgreSQL。按照推荐,安装过程其实非常简单:

推荐的安装方式

-1,使用wget获取到包含PostgreSQL rpm mirror配置的package

wget http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm[/code] 
-2, 安装所获取到的package

sudo rpm -ivh pgdg-centos94-9.4-1.noarch.rpm


-3,使用yum groupinstall安装PostgreSQL

sudo yum groupinstall "PostgreSQL Database Server 9.4 PGDG"


如果你的网络足够的好运,此处你应该已经安装成功了,否则可能会提示无可用的mirror这样的错误了。

不幸的是,我的网络没那么好运气! 我在安装过程中却发现了我的服务器无法连接到mirror,下载不到安装所需要的rpm package。不知道是否因为这些mirror是否都被挡在了墙外,不得不workaround:

有CN特色的安装方式

上文中讲到提示无法找到可用的mirror,之所以要找mirror是因为需要下载对应的package,那么我帮你下载到本地,然后直接安装就可以了(就是这么简单):

-1, 下载PostgreSQL所需要的Server, Libs, Contrib, Client等rpm packages

- 1.1 这里PostgreSQL for RHEL5 可以下载上述所需要的rpm文件们;

- 1.2 最好被他们都放在同一个目录下,这样做的好处是即使rpm packages直接有依赖关系,也可以让系统自己去决定安装先后顺序。

-2,使用yum安装所下载到的rpm package

sudo yum install *.rpm


然后一路确认下去,最后就得到了安装成功的提示了。

So, now the installed PostgreSQL instance is ready for use!

简单配置PostgreSQL

成功安装了PostgreSQL之后,现在可以使用它来测试了:一般情况下,安装之后,需要启动服务,然后方能正常使用。先来看看安装PostgreSQL之后,是否有服务安装了,RHEL下,这些服务通常会在
/etc/init.d/
目录下有对应的启动脚本。查看后发现
/etc/init.d/
目录下多出了一个文件
postgresql-9.4


还是惯例,以root身份启动这个服务,不过这里有可能会提示你启动失败,是因为PostgreSQL 9.4会要求先初始化数据库,然后才能提供服务,提示信息如下:

/var/lib/pgsql/9.4/data is missing. Use "service postgresql-9.4 initdb" to initialize the cluster first.


所以,安装PostgreSQL 9.4之后,正确的使用流程应该是:

-1, 先初始化db

sudo service postgresql-9.4 initdb


此处需要执行一点时间, Be patient!

-2,启动PostgreSQL9.4服务

sudo service postgresql-9.4 start


此处应该能看到绿色的[OK]啦!然后就可以使用PostgreSQL了!

-3, 验证启动结果

- 3.1 安装PostgreSQL成功之后,系统就会自动创建用户postgres这个用户,可以通过查看
/etc/passwd
这个文件,确定是否正确创建了这个用户;

- 3.2 切换到用户postgres登录,使用如下命令查看是否可以正常登录到PostgreSQL数据库,如果提示“postgres=#”则表示已经正确创建了postgres数据库并能正确使用这个数据库了!

-bash-3.2$ psql
psql (9.4.8)
Type "help" for help.
postgres=#


-4,创建用户和库

现在可以创建业务所使用的用户和数据库了,其实创建过程也比较简单(也许没有追求太深入,留后深造!),下面给出主要的命令:

- 4.1 先在root用户下创建一个系统用户 wh

useradd -s /bin/bash -d /home/wh -p passw0rd wh


- 4.2 然后在postgres用户下连接到PostgreSQL Server,执行如下的用户创建命令:


-bash-3.2$ psql
psql (9.4.8)
Type "help" for help.

postgres=# CREATE USER wh WITH PASSWORD 'passw0rd';


- 4.3 创建数据库并授权给所创建的用户


-bash-3.2$ psql
psql (9.4.8)
Type "help" for help.

postgres=# CREATE DATABASE test_db OWNER wh;
postgres=# GRANT ALL PRIVILEGES ON DATABASE test_db TO wh;
postgres=# \q


- 4.4 切换到wh在用户,尝试连接到数据库


-bash-3.2$ psql test_db
psql (9.4.8)
Type "help" for help.

test_db=>


至此,已经能够正确使用新创建的用户wh成功连接到新创建的PostgreSQL数据库了!

客户端访问PostgreSQL Server

通过上文所做的操作,已经能够让你在PostgreSQL所在机器本身操作创建的数据库了,但是,通常情况下,我们需要从其他的机器连接到数据库服务器,以便更好的让应用服务器和数据库服务器都能发挥出更佳的性能。

通过客户端连接PostgreSQL

1, 通过PostgreSQL Client尝试连接到PostgreSQL Server,却被提示无法连接:

$ psql -h 192.168.1.101 -p 5432 -U wh test_db -W
Password for user wh:
psql: could not connect to server: Connection refused
Is the server running on host "192.168.1.101" and accepting
TCP/IP connections on port 5432?


其原因是因为默认情况下,PostgreSQL虽然正确启动了,数据库服务器本身也能够正常的访问,但是,其他的机器并不能通过TCP/IP连接到PostgreSQL服务,默认它并未监听任何TCP/IP端口。

2, 这里就需要配置TCP/IP监听,以便允许其他机器访问PostgreSQL服务:

sudo vim /var/lib/pgsql/9.4/data/postgresql.conf
# 1, 修改listen_addresses = '*'
# 2, 修改port = 5432
# 3, 取消对应行的注释

# 重启PostgreSQL服务
sudo service postgresql-9.4 restart
Stopping postgresql-9.4 service:                           [  OK  ]
Starting postgresql-9.4 service:                           [  OK  ]


3, 再次从客户端尝试连接到PostgreSQL服务

$ psql -h 192.168.1.101 -p 5432 -U wh test_db -W
Password for user wh:
psql: FATAL:  no pg_hba.conf entry for host "192.168.1.102", user "wh", database "test_db", SSL off


出现这个错误有两方面的解释:

- 首先,端口5432已经开放监听了,并且接收到了PostgreSQL客户端的连接请求;

- 其次, 验证客户端连接合法性出错了,因为客户端“192.168.1.102”并未被允许连接。

4,添加客户端到白名单

在PostgreSQL服务器上修改配置文件
/var/lib/pgsql/9.4/data/pg_hba.conf


sudo vim /var/lib/pgsql/9.4/data/pg_hba.conf
# 添加允许IP 192.168.1.102连接的配置项
host    all       all       192.168.1.102/32    md5


回到客户端再次尝试连接,你就会发现这次是可以成功连接到PostgreSQL服务了。

$ psql -h 192.168.1.101 -p 5432 -U wh test_db -W
Password for user wh:
psql (9.4.8)
Type "help" for help.

test_db=>


总结

东扯西侃了半天,要说的都说了,但是行文逻辑不是特别清晰,各位发现有任何问题,请指出,我好改正,不要误导了别人!

谢谢

By STLV on 2016-06-16 @ WFC BJ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: