1. 程式人生 > >Linux下的PostgreSQL安裝

Linux下的PostgreSQL安裝

1. 安裝環境

postgresql-11.1

CentOS-6.3

確認linux系統可以正常連線網路,因為在後面需要新增依賴包。

2. pg資料庫下載地址

http://www.postgresql.org/ftp/source/

3. 安裝依賴包

yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel gcc-c++ openssl-devel cmake

4. 安裝postgres

1)在根目錄下新建pgsql資料夾,並將pgsql的壓縮包移入。

[[email protected] pgsql]# ls
postgresql-11.1.tar.gz
[[email protected] pgsql]# pwd
//pgsql

2)解壓壓縮包

[[email protected] pgsql]# tar -zxvf postgresql-11.1.tar.gz 

3)進入解壓後的資料夾 

[[email protected] pgsql]# cd postgresql-11.1
[

[email protected] postgresql-11.1]# ls
aclocal.m4  configure     contrib    doc             HISTORY  Makefile  src
config      configure.in  COPYRIGHT  GNUmakefile.in  INSTALL  README

4)編譯postgresql原始碼

[[email protected] postgresql-11.1]# ./configure --prefix=/pgsql/postgresql

             PostgreSQL配置指令碼選項

選項 描述
–prefix=prefix 安裝到prefix指向的目錄;預設為/usr/local/pgsql
–bindir=dir 安裝應用程式到dir;預設為prefix/bin
–with-docdir=dir 安裝文件到dir;預設為prefix/doc
–with-pgport=port 設定預設的伺服器端網路連線服務TCP埠號
–with-tcl 為服務端提供Tcl儲存過程支援
–with-perl 為服務端提供Perl儲存過程支援
–with-python 為服務端提供Python儲存過程支援

[[email protected] postgresql-11.1]# make

[[email protected] postgresql-11.1]# make install

至此,已完成postgreql的安裝。進入/pgsql/postgresql目錄可以看到安裝後的postgresql的檔案。

[[email protected] postgresql]# ls
bin  include  lib  share

5. 建立使用者組postgres並建立使用者postgres 

[[email protected] postgresql-11.1]# groupadd postgres
[[email protected] postgresql-11.1]# useradd -g postgres postgres
[[email protected] postgresql-11.1]# id postgres
uid=501(postgres) gid=501(postgres) 組=501(postgres)

6. 建立postgresql資料庫的資料主目錄並修改檔案所有者

這個資料庫主目錄是隨實際情況而不同,這裡我們的主目錄是在/pgsql/postgresql/data目錄下:

[[email protected] postgresql-11.1]# cd /pgsql/postgresql
[[email protected] postgresql]# mkdir data
[[email protected] postgresql]# chown postgres:postgres data
[[email protected] postgresql]# ls -al
總用量 28
drwxr-xr-x. 7 root     root     4096 12月 15 23:39 .
drwxr-xr-x. 4 root     root     4096 12月 15 23:14 ..
drwxr-xr-x. 2 root     root     4096 12月 15 23:14 bin
drwxr-xr-x. 2 postgres postgres 4096 12月 15 23:39 data
drwxr-xr-x. 6 root     root     4096 12月 15 23:14 include
drwxr-xr-x. 4 root     root     4096 12月 15 23:14 lib
drwxr-xr-x. 6 root     root     4096 12月 15 23:14 share

7. 配置環境變數

進入home/postgres目錄可以看到.bash_profile檔案。

[[email protected] postgresql]# cd /home/postgres
[[email protected] postgres]# ls -al
總用量 28
drwx------. 4 postgres postgres 4096 12月 15 23:37 .
drwxr-xr-x. 5 root     root     4096 12月 15 23:19 ..
-rw-r--r--. 1 postgres postgres   18 5月  11 2012 .bash_logout
-rw-r--r--. 1 postgres postgres  178 12月 15 23:37 .bash_profile
-rw-r--r--. 1 postgres postgres  124 5月  11 2012 .bashrc
drwxr-xr-x. 2 postgres postgres 4096 11月 12 2010 .gnome2
drwxr-xr-x. 4 postgres postgres 4096 9月  29 05:12 .mozilla
[[email protected] postgres]# 

編輯修改.bash_profile檔案。

[[email protected] postgres]# vi .bash_profile 

新增以下內容。

export PGHOME=/pgsql/postgresql

export PGDATA=/pgsql/postgresql/data

PATH=$PATH:$HOME/bin:$PGHOME/bin

儲存,退出vi。執行以下命令,使環境變數生效

[[email protected] postgres]# source .bash_profile 

8. 切換使用者到postgres並使用initdb初使用化資料庫

[[email protected] postgres]# su - postgres
[[email protected] ~]$ initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "zh_CN.UTF-8".
The default database encoding has accordingly been set to "UTF8".
initdb: could not find suitable text search configuration for locale "zh_CN.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.

fixing permissions on existing directory /pgsql/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /pgsql/postgresql/data -l logfile start

可以看到 /pgsql/postgresql/data已經有檔案了。

[[email protected] //]$ cd /pgsql/postgresql/data
[[email protected] data]$ ls
base          pg_ident.conf  pg_serial     pg_tblspc    postgresql.auto.conf
global        pg_logical     pg_snapshots  pg_twophase  postgresql.conf
pg_commit_ts  pg_multixact   pg_stat       PG_VERSION
pg_dynshmem   pg_notify      pg_stat_tmp   pg_wal
pg_hba.conf   pg_replslot    pg_subtrans   pg_xact

9.  配置服務

修改/pgsql/postgresql/data目錄下的兩個檔案。

postgresql.conf   配置PostgreSQL資料庫伺服器的相應的引數。  

pg_hba.conf        配置對資料庫的訪問許可權。

[[email protected] data]$ vi postgresql.conf 

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for all
                                        # (change requires restart)
#port = 5432                            # (change requires restart)

其中,引數“listen_addresses”表示監聽的IP地址,預設是在localhost處監聽,也就是127.0.0.1的ip地址上監聽,只接受來自本機localhost的連線請求,這會讓遠端的主機無法登陸這臺數據庫,如果想從其他的機器上登陸這臺數據庫,需要把監聽地址改為實際網路的地址,一種簡單的方法是,將行開頭的#去掉,把這個地址改為*,表示在本地的所有地址上監聽。

 [[email protected] data]$ vi pg_hba.conf 

找到最下面這一行 ,這樣區域網的人才能訪問。紅色為新新增內容。

# IPv4 local connections:
host    all             all             0.0.0.0/0                  trust
host    all             all             127.0.0.1/32            trust

10. 設定PostgreSQL開機自啟動

PostgreSQL的開機自啟動指令碼位於PostgreSQL原始碼目錄的contrib/start-scripts路徑下。

linux檔案即為linux系統上的啟動指令碼

[[email protected] pgsql]$ cd /pgsql/postgresql-11.1/contrib/start-scripts
[[email protected] start-scripts]$ ls
freebsd  linux  macos

1)切換為root使用者,修改linux檔案屬性,新增X屬性

[[email protected] start-scripts]# chmod a+x linux

2) 複製linux檔案到/etc/init.d目錄下,更名為postgresql

[[email protected] start-scripts]# cp linux /etc/init.d/postgresql

3)修改/etc/init.d/postgresql檔案的兩個變數

prefix設定為postgresql的安裝路徑:/pgsql/postgresql

PGDATA設定為postgresql的資料目錄路徑:/pgsql/postgresql/data

4)設定postgresql服務開機自啟動

[[email protected] init.d]# chkconfig --add postgresql

檢視開機自啟動服務設定成功。

[[email protected] init.d]# chkconfig

postgresql         0:關閉    1:關閉    2:啟用    3:啟用    4:啟用    5:啟用    6:關閉

5)編輯/etc/sysconfig/iptables檔案開放5432埠。

[[email protected] sysconfig]# cd /etc/sysconfig
[[email protected] sysconfig]# vi iptables
新增以下內容

-A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT

重啟服務
[[email protected] sysconfig]# /etc/init.d/iptables restart
iptables:清除防火牆規則:                                 [確定]
iptables:將鏈設定為政策 ACCEPT:filter           [確定]
iptables:正在解除安裝模組:                                     [確定]
iptables:應用防火牆規則:                                 [確定]

檢視埠是否開放

[[email protected] sysconfig]# /sbin/iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:5432 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

6)執行service postgresql start,啟動PostgreSQL服務

[[email protected] init.d]# service postgresql start
Starting PostgreSQL: ok

檢視PostgreSQL服務
[[email protected] init.d]# ps -ef | grep postgres
root      12040   3014  0 Dec15 pts/0    00:00:00 su - postgres
postgres  12041  12040  0 Dec15 pts/0    00:00:00 -bash
postgres  12177      1  0 00:29 ?        00:00:00 /pgsql/postgresql/bin/postmaster -D /pgsql/postgresql/data
postgres  12179  12177  0 00:29 ?        00:00:00 postgres: checkpointer                                    
postgres  12180  12177  0 00:29 ?        00:00:00 postgres: background writer                               
postgres  12181  12177  0 00:29 ?        00:00:00 postgres: walwriter                                       
postgres  12182  12177  0 00:29 ?        00:00:00 postgres: autovacuum launcher                             
postgres  12183  12177  0 00:29 ?        00:00:00 postgres: stats collector                                 
postgres  12184  12177  0 00:29 ?        00:00:00 postgres: logical replication launcher                    
root      12198  12132  0 00:30 pts/0    00:00:00 grep postgres

現在就可以通過客戶端進行連線訪問資料庫啦! 


https://www.cnblogs.com/sybblogs/p/5717392.html