红联Linux门户
Linux帮助

fedora22用rpm包安装配置postgresql数据库

发布时间:2015-08-09 21:51:09来源:linux网站作者:kmust20093211

严格内网环境,无网络连接,新装fedora 22系统,无任何其他配置。


安装
1.安装环境:

操作系统:fedora 22
数据库:postgresql-9.4
安装过程使用root用户


2.安装包:

postgresql94-libs-9.4.4-1PGDG.f22.x86_64.rpm
postgresql94-9.4.4-1PGDG.f22.x86_64.rpm
postgresql94-server-9.4.4-1PGDG.f22.x86_64.rpm


3.严格按照顺序安装:

rpm -ivh postgresql94-libs-9.4.4-1PGDG.f22.x86_64.rpm 
rpm -ivh postgresql94-9.4.4-1PGDG.f22.x86_64.rpm 
rpm -ivh postgresql94-server-9.4.4-1PGDG.f22.x86_64.rpm 


4.安装完成之后:

默认的pg数据库安装目录为:/usr/pgsql-9.4
默认的数据文件目录为:/var/lib/pgsql/9.4/data


5.特别注意:用rpm包安装比直接用工具yum装少了2步:

postgres提供的系统命令:如pg_ctl,psql,initdb,pg_dump等没有自动写入系统环境变量,因此不能直接使用,而要在安装目录下或者带上全路径或者手动加入全局环境变量后,才可以在所有的用户下直接使用。
和yum安装一样,pg会新建一个系统用户postgres,但在系统/home目录下没有新建postgres用户主目录。对于使用默认数据目录的用户来说,这个目录是可有可无的。但是对于要该数据目录到postgres用户主目录下来说,这个用户主目录则必需手动创建。


6.设置数据文件目录
要自己设置数据库的数据文件目录为postgres用户的主目录,由于rpm安装没有自动创建,所以需要手动创建。
创建目录

mkdir -p /home/postgres/data 

给目录赋权

chown -R postgres:postgres /home/postgres 


配置
1.初始化系统的数据库服务
初始化数据库簇

sudo /usr/pgsql-9.4/bin/postgresql94-setup initdb 

这里要特别注意的是pgsql-9.2以及之前版本的初始化方式,两者的最大区别在于命令postgresql后面有没有跟版本信息

sudo postgresql-setup initdb 


启动服务
默认postgresql的服务是关闭的,手动启动

sudo systemctl start /usr/pgsql-9.4/bin/postgresql-9.4.service 

也要注意psql-9.2以及之前版本的命令

sudo systemctl start postgresql.service 


设置服务开机启动
要设置开机启动

sudo systemctl enable /usr/pgsql-9.4/bin/postgresql-9.4.service 

也要注意psql-9.2以及之前版本的命令

sudo systemctl enable postgresql.service 


重启或者重新加载
要重启或者reload实例,用命令

sudo systemctl restart /usr/pgsql-9.4/bin/postgresql-9.4.service 
sudo systemctl reload /usr/pgsql-9.4/bin/postgresql-9.4.service 

也要注意psql-9.2以及之前版本的命令

sudo systemctl restart postgresql.service 
sudo systemctl reload postgresql.service 


2.初始化数据库
切换用户
先从当前的root用户切换到postgres用户,因为数据库操作必须使用pg自己建的这个用户:

su postgres  


切换目录
也别注意里提到过,pg提供的命令没有加入到环境变量,需要手动加入或者到命令目录下执行,切换到pg数据库安装目录的bin目录下:

cd /usr/pgsql-9.4/bin 


初始化
这里注意是初始化到我们上一步自己创建的数据目录下,而不是pg默认的数据目录下,所有需要加上路径

./initdb -D /home/postgres/data 

初始化成功后会有提示:

fedora22用rpm包安装配置postgresql数据库


2.启动数据库
采用logfile的方式启动,上面也有两种启动方式的提示:

./pg_ctl -D /home/postgres/data -l logfile start 

命令没有错,但是呢一启动就报错:logfile没有权限。我是百思不得其解:启动的数据文件夹是属于postgres用户的。我又尝试先去/home/postgres下先建好logfile文件再启动还是报同样的错误,但是明明文件夹和文件都是属于当前用户postgres的啊。
后来问了bigzhu之后我自己也是恍然大悟:logfile文件没有指定目录默认是在当前目录新建的,但是当前目录/usr/pgsql-9.4/bin是属于root用户的(因为安装时使用的是root),所以当前用户postgres是没有权限在root用户的文件夹中新建logfile文件的,所以才启动失败。
指定logfile文件的路径,用命令再启动

./pg_ctl -D /home/postgres/data -l /home/postgres/logfile start 

OK,启动成功。


3.启动错误分析
基于以上对错误的理解,那么采用其他2种方式也应该是可以的。


yum安装的启动方式
如果采用的是类似yum的包管理工具安装,那么pg的目录已加入了环境变量,在/home/postgres目录下,切换到postgres用户,然后用命令

pg_ctl -D /home/postgres/data -l logfile start 

肯定没有问题,logfile文件就创建在当前属于postgres用户的文件夹内。
命令全路径启动
在/home/postgres目录下,切换到postgres用户,然后用命令的全路径

/usr/pgsql-9.4/bin/pg_ctl -D /home/postgres/data -l logfile start 

应该也没有问题,logfile文件也是创建在当前属于postgres用户的文件夹内。


4.开启远程链接
pg数据库默认只开启本地链接,不能通过域名或者ip来远程链接,修改配置文件

su root 
vi /home/postgres/data/postgresql.conf 

注意这里要使用修改后的数据目录来配置,而不是pg默认的安装目录。
修改

#listen_addresses = 'localhost' 

为对所有的ip都监听,注意要去掉注释符号#

listen_addresses = '*' 


5.修改访问认证
用命令

su root 
vi /home/postgres/data/pg_hba.conf 

修改

# IPv4 local connections: 
hostall all 127.0.0.1/32  trust 

为md5认证

# IPv4 local connections: 
hostall all 0.0.0.0/0  md5 


6.重启数据库
切换用户,命令重启

/usr/pgsql-9.4/bin/pg_ctl -D /home/postgres/data -l logfile restart 

到此,数据库安装配置启动全部完成,可以正常使用。


错误补充
当我使用远程应用服务器连接到本数据库时报错:

psql: 无法联接到服务器: 没有到主机的路由 
服务器是否在主机 "135.32.9.99" 上运行并且准备接受在端口 
5432 上的 TCP/IP 联接? 

用图形界面工具测试报错:

fedora22用rpm包安装配置postgresql数据库

现在的情况是:

数据库已经启动并正常运行,端口是5432;
远程链接已经设置完成并且重启了数据库;

但是远程链接就连不上,最后发现的原因是feodra 22自带的防火墙开启,把外来链接屏蔽掉了,关掉feodra的防火墙:

sudo systemctl stop firewalld.service 

链接成功,可以使用。


Fedora21升级到Fedora22后,PostgreSQL无法启动:http://www.linuxdiyf.com/linux/12657.html

CentOS 6.5下PostgreSQL故障切换实现:http://www.linuxdiyf.com/linux/12605.html

Linux安装PostgreSQL 9.4:http://www.linuxdiyf.com/linux/12237.html

在Linux下面卸载与重新安装PostgreSQL(rpm包):http://www.linuxdiyf.com/linux/7288.html

Fedora安装PostgreSQL 8.4.11:http://www.linuxdiyf.com/linux/3854.html