每天晚上疲劳的睡在床上时,才感觉真真切切地过了一天。人生最重要的不仅是努力,还有方向。压力不是有人比你努力,而是比你牛叉几倍的人依然比你努力。即使看不到未来,即使看不到希望,也依然相信,自己错不了,自己选的人生错不了。第二天叫醒我的不是闹钟,其实,还是梦想!!
2013-07-14 20:08:58
1. 准备条件
1) 装了GCC的ubuntu操作系统 (我安装在了虚拟机上)
2) 下载好的postgreSQL 9.19或二进制包(二进制包也可以在ubuntu上直接获取)
2. postgreSQL安装
postgreSQL安装分为源码安装和二进制安装,各有各的好处,源码安装可以自己制定一些参数和设置(详细参考);二进制安装可以不需要怎么配置就可以直接使用了,简单、方便。但做正规项目部署的话,还是建议使用源码安装,可以针对项目进行灵活的配置。
另问题:我安装上ubuntu后,系统当中并没有GCC,我是直接上网apt-get install的;看安装包(ubuntu-12.04.2-server-amd64)中有GCC的目录,但安装时老是提示缺少依赖,找依赖要找一大堆,麻烦,有知道怎么使用系统安装包装GCC的同学,请共享下经验呗。
2.1 二进制包安装
1) 在线获取postgreSQL9.1,命令如下:apt-get install postgresql-9.1;不要选错了。之后选择“Y”即可自动安装。
安装完成后postgreSQL已经自动启动,如下:
2) 安装完成后只需关注刚初始化的数据库管理文件和数据文件的存放位置。
数据文件:/var/lib/postgresql/9.1/main/
数据库配置文件:/etc/postgresql/9.1/main
管理文件和lib库文件:/usr/lib/postgresql/9.1/,里面包括bin和lib目录
3) 安装完成后,postgreSQL会创建一个针对数据库操作的postgres操作系统用户,通过root的su passwd postgres 可以更改系统postgres用户的密码。我们切换到postgres用户下面,并执行psql命令(可以直接使用psql命令,是因为二进制包的配置在安装时已经将$PATH环境变量写好了),可以看到已经进入到数据中。
4) 此时,postgresql数据库已经可以在本机访问了,但要通过客户端(比如windows上装的pgAdmin3,或pgpool-II等第三方组件等),还需要配置两个文件:pg_hba.conf(连接数据库的身份验证方式)、postgresql.conf(数据的配置文件),这些文件都在 数据库配置文件:/etc/postgresql/9.1/main 目录中。其中的配置在下面会讲到。
2.2 源码安装
1) 将下载好的源码包(postgresql-9.1.9.tar.gz)上传并进入到/usr/local/src目录下面。如何做linux和windows之间的共享,网上有一大批文章可以参阅,在这里不再做讲解。我使用的是简单的samba共享。
2) 解压缩源码包:tar –zvxf postgresql-9.1.9.tar.gz
3) 进入刚解压缩出的postgresql-9.1.9目录:cd postgresql-9.1.9/ 可以看到如下文件:
4) 此时,我们需要编译postgresql,--prefix 参数用于指定安装目录,我们先在/usr/local/下创建postgresql目录,命令如下:mkdir /usr/local/postgresql(图就不贴了);其中还有很多参数,请大家参考官方文档。
在安装过程中会出现缺少两个组件的依赖,readline和zlib;readline作用是用psql进入数据库后对操作的记忆,即退出psql后再进入,使用“↑”或“↓”时显示之前打出的命令,跟dos操作差不多。Zlib的作用是后期对日志的压缩。当然,在编译的时候也可以使用--without-readline --without-zlib来忽略这两个错误,但我们现在还是安装上吧。从网上直接获取,apt-get install libreadline6-dev zlib1g-dev
编译postgresql:./configure --prefix=/usr/local/postgresql
make world或make(world指全部编译,也可以不用加)
make install-world或make install
5) 编译安装完成后在/usr/local/postgresql目录下会出现postgresql的一些管理文件、头文件、库文件等目录。如下图:
此时,只是安装了postgresql数据库的软件而已,还没有初始化数据库。先在/usr/local/postgresql目录下面创建一个data目录(当然也可以存放于其他地方),用于存放初始化的数据库的文件。
现在我们需要一个操作系统级别的管理数据库的组(定义为postgres)和用户(定义为postgres)并修改postgres密码为123,操作命令:
groupadd postgres
useradd –g postgres postgres
passwd postgres
对新创建postgres用户赋予data目录的自由操作权限。命令:chown –R postgres /usr/local/postgresql/data
一切准备就绪,我们切换到postgres用户,并进入到bin目录,使用initdb命令初始化第一个数据库。Initdb中我们需要--encoding参数为utf8,设置数据库编码为utf8,我们将数据库初始化到/usr/local/postgresql/data目录中。其完整命令为:initdb --encoding=utf8 –D /usr/local/postgresql/data
至此数据创建完毕,可以看到启动数据库命令的提示,有两种方法启动:(1)./postgres –D ../data (2)./pg_ctl –D ../data –l logfile start,相对路劲为/usr/local/postgresql/bin;
如果想在同一台机器中部署两个数据库实例,则可以再使用initdb命令将数据库初始化到另一个目录中,此目录要更改为postgres用户拥有权限,初始化完成后更改端口即可。
2.3 postgreSQL安装完成后的配置
2.3.1外部远程访问postgreSQL
postgreSQL数据库初始化安装完毕后,默认只能在本机访问,而其他电脑无法访问本机的postgreSQL。如果需要外部访问postgreSQL,则需要修改几个文件,postgresql.conf、pg_hba.conf;
找到对应的数据目录,如果按本文安装,使用二进制包安装的,数据库配置目录为:/etc/postgresql/9.1/main;如果是按源码安装的,数据库目录为:/usr/local/postgresql/data;打开后目录中可以看到有postgresql.conf、pg_hba.conf文件。
1) 修改postgresql.conf文件:
此文件为数据库的配置文件,包括postgreSQL的连接数量配置、共享内存的配置、日志配置、数据库复制配置等管理用的配置文件。以后配置集群等需要修改此文件。
找到#- Connection Settings - 节下的
#listen_addresses=’localhost’ 改为listen_addresses=’*’ (’#’号注释不要,localhost改为’*’,接受为任何连接)
#port=5432改为port=5432(’#’号注释不要)
2) 修改pg_hba.conf文件:
此文件为数据库的连接配置文件,用来限制或允许什么样的地址以什么样的访问方式可以访问postgreSQL。详细的内容不再多讲,此文件头部有注释,相信大家都可以看的懂。
在此文件中增加如下行:
host all all 0.0.0.0/0 md5
解释下含义:
文件格式为:host DATABASE USER ADDRESS METHOD [OPTIONS]
Host:主机访问类型,local为Unix-domain socket连接访问方式,host为TCP/IP socket或SSL-encrypted TCP/IP socket连接访问方式。
第一个all:要访问的数据库,all则为全部。
第二个all:以那个用户访问数据库,all则为全部
0.0.0.0/0:允许所有IP访问
md5:以md5的连接访问postgreSQL,如果是trust,则连接postgreSQL不需要密码。但为安全起见,我们使用md5。
至此,两个文件都已经更改完毕,重新启动postgreSQL即可。切换postgres用户,输入重启数据库命令:./pg_ctl –D ../data restart
但此时使用pgadmin-III连接postgreSQL时会出现以下错误FATAL: password authentication failed for user "postgres",
原因为初始化数据库后,系统会自动添加一个无密码的postgres用户,而且使用本机访问数据库时是trust方式的(详见pg_hba.conf文件),因此在本机访问数据库可以不需要密码,但非本机的连接则需要密码,所以我们需要在数据库中增加postgres用户的密码。