linux下手动安装postgresql
晚点
|
1#
晚点 发表于 2006-10-08 00:43
linux下手动安装postgresql
linux下大家安装postgresql时估计都是以系统默认安装为准(这只是猜测,不要骂我),这样很多东西我们都不明白,一但出问题了就不知道如何去解决!
下面我就我自己在centOS4.3下从源码安装postgresql与配置它的步骤一一记录下来,与大家一起分享. 1:从http://www.postgresql.org下载posgtgresql源码包.我下的时8.1.4版本的. 得到postgresql-8.1.4.tar.gz文件. 2:解压此文件 tar -zxf postgresql-8.1.4.tar.gz 3:运入解压后的文件夹 cd postgresql-8.1.4 4:配置 ./configure --prefix=PREFIX 其中PREFIX是你要安装postgresql的路径 5:编译 gmake (一定要记得用 GNU make。) 依你的硬件而异,制作过程可能需要 5 分钟到半小时。显示的最后一行应该是 All of PostgreSQL is successfully made. Ready to install. 6:安装 gmake install 7:安装后设置( 要做这些事情,把下面几行加到你的 shell 启动文件,如 ~/.bash_profile (或 /etc/profile--如果你想影响所有用户)) 7.1:共享库 设置共享库的搜索路径的方法因平台而异, 但是最广泛使用的方法是设置环境变量 LD_LIBRARY_PATH 如: LD_LIBRARY_PATH=安装路径/libexport LD_LIBRARY_PATH7.2:环境变量严格说,这些都不是必须的,但这么做可以让你使用PostgreSQL更方便。安装路径/bin:$PATHexport PATH为了让你的系统找得到 man(手册)文档,你需要加类似下面的一行到一个shell启动文件里(除非你安装到了缺省时搜索的位置):MANPATH=安装路径/man:$MANPATHexport MANPATH 8:使用postgresql8.1:postgresql用户账户 和大量其它可以从外界访问的服务器守护进程一样, 我们也建议用一个独立的用户帐户运行PostgreSQL。 这个用户帐户应该拥有由这个服务器管理的数据,而且不应该与其他守护进程共享这些数据。 (比如,用nobody 用户是个烂主意。) 我们不建议把可执行文件安装为由此用户所有, 因为这样一来被攻破的系统就可以修改它们自己拥有的二进制文件。 要向你的系统里增加用户帐户,参考命令 useradd 或 adduser。 我们经常使用 postgres 的用户名,并且在本书中都假设这个名字,但你不必这么做。 8.2:创建数据库集群 用文件系统的术语来说,一个数据库集群将是一个目录,所有数据都将存放在这个目录中。 我们把它称做数据目录或数据区。 在哪里存放数据完全是你的选择,我们没有缺省值,尽管 /usr/local/pgsql/data 或 /var/lib/pgsql/data 这样的目录很常用。 要初始化一个数据库集群,可以使用命令 initdb, 这个命令与 PostgreSQL 一起安装。你可以用-D 标识你为你的数据库系统选择的文件系统位置,例如: $ 安装路径/bin/initdb -D /usr/local/pgsql/data 请注意你必须以PostgreSQL用户的身份来执行这条命令, 这一点我们在前面一节描述过。 提示: 作为 -D选项的替代品,你还可以使用环境变量 PGDATA。 如果你声明的路径还不存在,initdb 将试图创建它。 你很有可能缺少做这些事情的权限(如果你按照我们的建议创建了一个非特权帐户的话)。 这时,你可以自己创建该目录(以root身份)然后把该目录的所有权交给PostgreSQL用户或者赋与她写权限。 下面是可能有效的方法: root# mkdir /usr/local/pgsql/dataroot# chown postgres /usr/local/pgsql/dataroot# su postgrespostgres$ 安装路径/bin/initdb -D /usr/local/pgsql/data 如果数据目录看起来象已经初始化过了,那么 initdb 会拒绝运行。 因为数据目录包含所有存储在数据库里的数据,所以出于安全考虑,这个目录不能给任何非授权用户访问。因此, initdb 禁止除 PostgreSQL 用户帐户以外的任何用户访问这个目录。 8.3:启动与停止数据库服务 启动:安装路径/bin/pg_ctl -D /usr/local/pgsql/data start 停止:安装路径/bin/pg_ctl -D /usr/local/pgsql/data stop8.4:客户端连接问题postgresql默认情况下除本机外的机器是不能连接的,且本机的连接是信任连接,只要有用户名就可以连接,不用密码. 要改变这种默认设置需要更改postgresql的两个配置文件(pg_hba.conf与postgresql.conf,这两个文件在initdb时指定的目录下,如:/usr/local/pgsql/data)8.4.1:pg_hba.conf文件内容: 文件 pg_hba.conf 的常用格式是一套记录, 每行一条。空白行行被忽略,井号( # )开头的注释也被忽略。 一条记录是由若干用空格和/或 tab 分隔的字段组成。 如果字段用引号包围,那么它可以包含空白。记录不能跨行存在。 每条记录声明一种联接类型,一个客户端 IP 地址范围(如果和联接类型相关的话),一个数据库名,一个用户名字, 以及对匹配这些参数的联接使用的认证方法。 第一条匹配联接类型,客户端地址和联接企图请求的数据库名和用户名的记录将用于执行认证。 这个处理过程没有"跨越"或者"回头"的说法:如果选择了一条记录而且认证失败, 那么将不考虑后面的记录。如果没有匹配的记录,那么访问将被拒绝。 每条记录可以下面七种格式之一 local database user authentication-method [authentication-option] host database user CIDR-address authentication-method[authentication-option] hostssl database user CIDR-address authentication-method [authentication-option] hostnossl database user CIDR-address authentication-method [authentication-option] host database user IP-address IP-mask authentication-method [authentication-option] hostssl database user IP-address IP-mask authentication-method [authentication-option] hostnossl database user IP-address IP-mask authentication-method [authentication-option] 各个字段的含义如下: local 这条记录匹配通过 Unix 域套接字进行的联接企图。 没有这种类型的记录,就不允许 Unix 域套接字的联接。 host 这条记录匹配通过 TCP/IP 进行的联接尝试。 host 记录匹配 SSL 和非 SSL 的连接请求。 注意: 除非服务器带着合适的 listen_addresses 配置参数值启动,否则将不可能进行远程的 TCP/IP 连接, 因为缺省的行为是只监听本地自环地址 localhost 的连接。 hostssl 这条记录匹配使用 TCP/IP 的 SSL 联接企图。 但必须是使用 SSL 加密的联接。 要使用这个选项,制作服务器的时候必须打开 SSL 支持。而且在服务器启动的时候, 必须SSL选项通过配置选项ssl打开。 hostnossl 这个记录与 hostssl 有着正相反的逻辑: 它只匹配那些在 TCP/IP 上不使用 SSL 的连接请求。 database 声明记录所匹配的数据库。值 all 表明该记录匹配所有数据库, 值 sameuser表示如果被请求的数据库和请求的用户同名,则匹配。 samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。 在其他情况里,这就是一个特定的 PostgreSQL 的名字。 我们可以通过用逗号分隔的方法声明多个数据库。 一个包含数据库名的文件可以通过对该文件前缀 @ 来声明。 user 为这条记录声明所匹配的PostgreSQL用户。值 all 表明它匹配于所有用户。 否则,它就是特定 PostgreSQL 用户的名字。多个用户名可以通过用逗号分隔的方法声明。组名字可以通过用 + 做组名字前缀来声明。 一个包含用户名的文件可以通过在文件名前面前缀 @ 来声明。该文件必需和 pg_hba.conf 在同一个目录。 CIDR-address 声明这条记录匹配的客户端机器的 IP 地址范围。它包含一个标准的点分十进制的 IP 地址和一个 CIDR 掩码长度。 (IP 地址只能用数值声明,不能用域或者主机名。) 掩码长度表示客户端 IP 地址必须匹配的高位二进制位数。 在给出的 IP 地址里,这个长度的右边的二进制位必须为零。 在 IP 地址,/,和 CIDR 掩码长度之间不能有空白。 典型的 CIDR 地址是 172.20.143.89/32,这表明一个主机, 或者 172.20.143.0/24 表示一个网络。 要声明单个主机,给 IPv4 地址声明 CIDR 掩码 32,给 IPv6 地址声明 128。 以 IPv4 格式给出的 IP 地址会匹配那些拥有对应地址的 IPv6 连接,比如 127.0.0.1 将匹配 IPv6 地址 ::ffff:127.0.0.1。 一个以 IPv6 格式给出的记录将只匹配 IPv6 连接,即使对应的地址在 IPv4-in-IPv6 范围内。请注意如果系统的 C 库不支持 IPv6 地址,那么 IPv6 的格式将被拒绝。 这个域只适用于 host,hostssl 和 hostnossl 记录。 IP-address IP-mask 这些方法可以用于作为 CIDR-address 表示法的替补。 它不是声明掩码的长度,而是在另外一个字段里声明实际的掩码。 比如,255.0.0.0 表示 IPv4 CIDR 掩码长度 8,而 255.255.255.255 表示 CIDR 掩码长度 32。 同样的匹配逻辑将用于一个点分的 IP-mask。 这些字段只适用于 host, hostssl, 和 hostnossl 记录。 authentication-method(认证方法) 声明通过这条记录联接的时候使用的认证方法。 trust 无条件地允许联接。这个方法允许任何可以与PostgreSQL 数据库服务器联接的用户以他们期望的任意 PostgreSQL 数据库用户身份进行联接,而不需要口令。 reject 联接无条件拒绝。常用于从一个组中"过滤"某些主机。 md5 要求客户端提供一个 MD5 加密的口令进行认证。 crypt 要求客户端提供一个 crypt() 加密的口令用于认证。 7.2 以前的客户端只能支持 crypt。 对于 7.2 以及以后的客户端,我们建议使用 md5。 password 要求客户端提供一个未加密的口令进行认证。 因为口令是以明文形式在网络上传递的, 所以我们不应该在不安全的网络上使用这个方式。 krb4 用 Kerberos V4 认证用户。只有在进行 TCP/IP 联接的时候才能用。 krb5 用 Kerberos V5 认证用户。只有在进行 TCP/IP 联接的时候才能用。 ident 获取客户的操作系统名(对于 TCP/IP 联接,用户的身份是通过与运行在客户端上的 ident 服务器联接进行判断的,对于本地联接,它是从操作系统获取的。) 然后检查一下,看看用户是否允许以要求的数据库用户进行联接, 方法是参照在 ident 关键字后面声明的映射。 pam 使用操作系统提供的可插入的认证模块服务 (Pluggable Authentication Modules) 我的配置示例如下: # 本机localhost使用信任连接 local all all trust #127.0.0.1与192.168.1.0~254段IP地址访问时需要口令验证 #要让本机外的机器访问,除了在这设置外还要把postgresql.conf #里的监听地址设置为:listen_addresses = '*' host all all 127.0.0.1/32 md5 host all all 192.168.1.0/24 md5 8.4.2:postgresql.conf文件内容 为了使postgresql支持tcp/ip连接,要设置监听地址行,参考内容如下: # - Connection Settings - listen_addresses = '*' #port = 5432 max_connections = 100 8.5:重新启动服务,现在的postgresql就支持tcp/ip连接了,就可以用psql进行测试了. |