postgresql 安裝與部署

搭建環境步驟

環境配置要求

1、GNU make version 3.80 (可通過make  --version 檢視)
2、c編譯環境(要符合c89標準),GCC版本推薦最新
3、磁碟空間最少150MB,(Linux 可通過df 命令檢視)

軟體下載

1、  [ PostgreSQL下載地址 ](https://www.postgresql.org/ftp/source/)
2、  [ readline下載地址 ] (http://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz)
3、  [ zlib下載地址 ] http://www.zlib.net/zlib-1.2.11.tar.gz
     本次下載 postgresql-9.6.3.tar.gz (9.x和10.x 安裝方法相同)
  • 注意以下解壓和安裝軟體都在 root 許可權下進行的

檢查和配置postgres使用者(是否該環境有當前使用者),用於資料庫使用者

clw-db1:~ # cat /etc/passwd | grep postgres

clw-db1:~ # id postgres
id: postgres: No such user

建立 postgreslinux 作業系統組和賬戶

clw-db1:~ # groupadd -g 10000 postgres
clw-db1:~ # useradd -g 10000 -u 10000 postgres

校驗使用者

clw-db1:~ # id postgres
uid=10000(postgres) gid=10000(postgres) groups=16(dialout),33(video),10000(postgres)

建立 postgres 使用者 home 目錄,存放 postgres 使用者的記錄(bash、profile、shell等)

clw-db1:~ # mkdir /home/postgres
clw-db1:~ # chown postgres.postgres /home/postgres/
clw-db1:~ # usermod -d /home/postgres postgres

安裝PostgreSQL 9.6

上傳原始碼和依賴包到指定目錄略(postgresql-9.6.6.tar.gz、readline、zlib)

解壓 PostgreSQL 9.6.8

clw-db1:~/pgsoft # tar -xf readline-7.0.tar.gz 
clw-db1:~/pgsoft # tar -xf zlib-1.2.11.tar.gz 
clw-db1:~/pgsoft # tar -xf postgresql-9.6.8.tar.gz

首先安裝 readline 依賴

clw-db1:~/pgsoft/readline-7.0 # ./configure 
clw-db1:~/pgsoft/readline-7.0 # make && make install

其次安裝 zlib 依賴

clw-db1:~/pgsoft/zlib-1.2.11 # make
clw-db1:~/pgsoft/zlib-1.2.11 # make install

最後安裝PostgreSQL 9.6.8,本次安裝忽略安裝readline(記錄歷史sql命令查詢)依賴

clw-db1: mkdir -p /opt/pgsql-9.6                  # 建立軟體安裝目錄 /opt/pgsql-9.6
clw-db1: chown postgres.postgres -R /opt          # 為建立的目錄分配所屬使用者和組為 postgres
clw-db1:~/pgsoft/postgresql-9.6.8 # cd /pgsoft/postgresql-9.6.8/   #進入解壓後的postgresql 目錄
clw-db1:~/pgsoft/postgresql-9.6.8 # ./configure --prefix=/opt/pgsql-9.6 --without-readline
  • 引數說明
./configure :為linux原始碼編譯安裝檢查命令,檢查軟體安裝所需環境是否正常
--prefix :為指定軟體的編譯安裝的目錄,
--wihtout-readline --without表示忽略檢查,-readline 表示忽略安裝的軟體包,
  即忽略readline 依賴包的檢查,該包用於 在psql命令列中記錄命令,可進行上下翻滾
  檢視歷史命令,建議最好安裝,不要進行忽略,即不要指定該引數 --without-readline 

檢視機器CPU核數,process 表示CPU核數從0開始

 cat /proc/cpuinfo |grep less

編譯時 world 為安裝postgresql 安裝包下所有軟體, 使用 -j 8(該引數可忽略) 指定8核編譯;

clw-db1:~/pgsoft/postgresql-9.6.8 # make world -j 8

make 後看到“PostgreSQL, contrib, and documentation successfully made. Ready to install.”說明編譯成功。

開始安裝,- world 表示安裝所有安裝包自帶的軟體和擴充套件

clw-db1:~/pgsoft/postgresql-9.6.8 # make install-world

執行命令後看到“PostgreSQL, contrib, and documentation installation complete.”說明安裝成功。

  • 安裝成功後可到指定的 /opt/pgsql-9.6 安裝目錄下檢查是否包含以下目錄
lib 、include 、share等

檢查安裝 postgreSQL 版本是否為 9.6

clw-db1:~/pgsoft/postgresql-9.6.8 # /opt/pgsql-9.6/bin/postgres --version

postgres (PostgreSQL) 9.6.8

初始化資料目錄

建立資料庫及相關目錄

clw-db1:~ # mkdir -p /pgdata/9.6/poc/{data,archive,scripts,backup}

目錄名稱可自定義

data : 資料庫存放目錄, 必需
archieve : 日誌歸檔存放目錄,非必需
scripts : 指令碼存放目錄(故障轉移、日誌清理等)非必需
backup : 備份存放目錄 非必需

配置上面建立的目錄所屬使用者和組(postgres.postgres中的 .: 等同,看個人愛好)

clw-db1:~ # chown -R postgres.postgres /pgdata/9.6

表示把/pgdata/9.6 目錄下所有檔案都分配給 postgres使用者和組,-R 表示遞迴

檢查資料目錄,“-“ 表示會自動切換到之前建立的使用者的home目錄下

clw-db1:~ # su - postgres
postgres@clw-db1:~> 
postgres@clw-db1:~> pwd
/home/postgres
postgres@clw-db1:/pgdata/9.6/poc> cd /pgdata/9.6/poc/
postgres@clw-db1:/pgdata/9.6/poc> 
postgres@clw-db1:/pgdata/9.6/poc> ll
total 16
drwxr-xr-x 2 postgres postgres 4096 May  3 15:44 archive
drwxr-xr-x 2 postgres postgres 4096 May  3 15:44 backup
drwxr-xr-x 2 postgres postgres 4096 May  3 15:44 data
drwxr-xr-x 2 postgres postgres 4096 May  3 15:44 scripts

執行 /opt/pgsql-9.6/bin/initdb 進行 初始化資料目錄

[email protected]-db1:/pgdata/9.6/poc> /opt/pgsql-9.6/bin/initdb -D /pgdata/9.6/poc/data/ -E UTF-8 --locale=zh_CN.UTF-8
-D 表示指定資料庫存放目錄
-E 表示 指定字符集編碼 

data 目錄許可權會自動修改為0700許可權,ll 檢查目錄許可權是否為rwx (r=4,w=2,x=1)也可手動配置,r為讀許可權 w為寫許可權 x為執行許可權。

[email protected]-db1:/pgdata/9.6/poc> ll
total 16
drwxr-xr-x  2 postgres postgres 4096 May  3 15:44 archive
drwxr-xr-x  2 postgres postgres 4096 May  3 15:44 backup
drwx------ 19 postgres postgres 4096 May  3 15:54 data
drwxr-xr-x  2 postgres postgres 4096 May  3 15:44 scripts

手動配置

chmod 0700 /data

啟動和停止

修改 postgresql.conf 配置檔案,該檔案在初始化時指定的資料庫 data 目錄下

postgres@clw-db1:~> vim /pgdata/9.6/poc/data/postgresql.conf 

編輯配置檔案並修改以下引數如下:

  • 必須引數
listen_addresses = '*'        
port = 5432  
log_destination = 'csvlog'
logging_collector = on
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' 
  • 可選引數 (可跳過以下引數) 配置
max_connections = 100    
superuser_reserved_connections = 10    
shared_buffers = 32GB    
maintenance_work_mem = 2GB      
shared_preload_libraries = 'pg_stat_statements'
wal_level = logical    
archive_mode = on    
archive_command = '/bin/true'   
max_wal_senders = 10    
max_replication_slots = 10  
hot_standby = on    
random_page_cost = 1.1        
effective_cache_size = 64GB  

通過 /opt/pgsql-9.6/bin/pg_ctl 啟動 PostgreSQL 服務

[email protected]-db1:~> /opt/pgsql-9.6/bin/pg_ctl -D /pgdata/9.6/poc/data/ start
server starting
[email protected]-db1:~> LOG:  redirecting log output to logging collector process

-D 表示指定初始化的資料庫目錄

看到以下行說明啟動成功:

2018-05-03 16:19:00.067 CST,,,20626,,5aeac5f2.5092,2,,2018-05-03 16:18:58 CST,,0,LOG,00000,"database system is ready to accept connections",,,,,,,,,""

建立必要的資料庫,/opt/pgsql-9.6/bin/psql 為postgresql 的命令列連線命令

postgres@clw-db1:~> /opt/pgsql-9.6/bin/psql -p 5432 -U postgres postgres
psql (9.6.8)
Type "help" for help.

postgres=# 
postgres=# CREATE DATABASE pocdb;
CREATE DATABASE
  • 引數說明
-p 表示PostgreSQL資料庫的埠號,預設5432 -U 表示登入使用者為 postgres 
第二個 postgres 表示為連線的資料庫名稱 

建立 user (非必須操作):

postgres=# \c pocdb
You are now connected to database "pocdb" as user "postgres".
pocdb=# 
pocdb=# 
pocdb=# CREATE USER repl ENCRYPTED PASSWORD '123456' REPLICATION;
CREATE ROLE
  • 引數
\c 表示切換資料庫,pocdb 為資料庫名稱

驗證使用者:

pocdb=# \du+                   # \du 表示查詢當前資料下所有使用者和擁有的許可權
                                          List of roles
 Role name |                         Attributes                         | Member of | Description 
-----------+------------------------------------------------------------+-----------+-------------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}        | 
 repl      | Replication                                                | {}        | 

退出連線

pocdb=# \q         #\q 表示退出當前postgreSQL命令列
postgres@clw-db1:~> 

完成安裝

若需要從pgAdmin遠端訪問該資料庫,則需要連線資料庫為預設使用者 postgres 修改密碼,建議第一次記登陸後,執行該操作

postgres=# ALTER USER postgres WITH PASSWORD '123456';
ALTER ROLE
postgres=#

修改 pg_hba.conf 配置檔案,指定 IP 為192.168.0.124 的所有使用者通過密碼認證進行連線該伺服器上所有資料庫

[email protected]:/pgdata/10/poc/data> vi pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             192.168.0.124/32         md5
"pg_hba.conf" 96L, 4652C                                                
  • 引數說明
host 表示當前主機 第一個all表示該主機所有的資料庫,可具體指定資料庫名稱
第二個 all 表示所有使用者 ,可指定具體使用者 第四個IP地址,可設定為0.0.0.0./0
表示所有ip地址 ,最後一個md5 表示進行md5加密密碼認證   

修改上述配置檔案後需要 重啟服務 ,然後IP地址為 192.168.0.124 就可以使用pgAdmin 通過
postgres 使用者,密碼為 123456 進行客戶端連線。

  • 重啟 服務命令
 /opt/pgsql-9.6/bin/pg_ctl -D /pgdata/9.6/poc/data restart

常見問題Q&A

1、編譯檢查時,提示沒有依賴包 readline , zlib 導致編譯檢查失敗?

  • 出現此問題,請到對應網站下載該包,也可以忽略安裝,但是會導致一些後期資料庫操作的不方便,建議最好下載安裝

2、若在操作過程中遇到 Permission Dennied ,或者許可權不足問題?

  • 安裝軟體首先需要使用者為 root 或者擁有 root 許可權,若提示提示 沒有許可權 操作檔案時,請通過 ll 命令檢視該檔案,確認該檔案所屬主使用者是否為當前使用者,若不是則可通過
    chown postgres.postgres /home -R 分配所屬主,無執行許可權則可通過 chmod 700 test 提升許可權,test 為檔名

3、postgreSQL預設埠為 5432 ,若埠被佔用,可通過修改配置檔案 pg_hba.conf 來修改埠號,修改配置檔案需要重啟服務.

注意

  • 請不要隨意刪除安裝的資料庫 data 目錄下的任意檔案,防止發生不可恢復的錯誤

    本教程主要便於後期多環境部署,沒有配置環境變數,故每次啟動、停止等命令需要指定具體目錄,詳細配置環境
    變數可參考安裝PostgreSQL 10.x的安裝教程。
    若有問題可聯絡 QQ:976124272 進行探討,歡迎共同探討技術。

.