1. 數據庫安裝與配置步驟
-
安裝環境準備
- 操作系統: Oracle Linux Server 6.5
- IP 地址: 192.168.6.177
- 版本信息: MySQL Community Server 5.7.18
- 安裝方式: RPM包
-
下載安裝包
-
訪問PostgreSQL網站
PostgreSQL網站 根據操作系統類型和版本下載相應的安裝包
需要下載以下的安裝包:
- postgresql96-9.6.3-4PGDG.rhel6.x86_64.rpm
- postgresql96-contrib-9.6.3-4PGDG.rhel6.x86_64.rpm
- postgresql96-libs-9.6.3-4PGDG.rhel6.x86_64.rpm
- postgresql96-server-9.6.3-4PGDG.rhel6.x86_64.rpm
-
-
安裝PostgreSQL
- 將Postgres安裝包放置在同一個文件夾中, 執行安裝命令
[root@DB-Server-Node1 ~]# rpm -ivh postgresql96-*.rpm Preparing... ########################################### [100%] 1:postgresql96-libs ########################################### [ 25%] 2:postgresql96 ########################################### [ 50%] 3:postgresql96-contrib ########################################### [ 75%] 4:postgresql96-server ########################################### [100%]
-
安裝文件夾說明
通過RPM包安裝, Postgres安裝程序會在/var和/usr下創建文件夾。
/var/lib/pgsql: 用于存放Postgres數據庫默認的數據文件夾
/usr/pgsql-${version}: 用于存放Postgres數據庫的命令、依賴庫及文檔目錄等信息 -
將Postgres命令加入系統路徑
修改/etc/profile文件, 將Postgres命令加入系統路徑,并測試
[root@DB-Server-Node1 ~]# vi /etc/profile ... ... # 在文件最后加入以下語句 export PATH=$PATH:/usr/pgsql-9.6/bin # 保存退出后, 執行source命令, 讓配置即時生效 [root@DB-Server-Node1 ~]# source /etc/profile # 測試Postgres命令 [root@DB-Server-Node1 share]# postgres --version postgres (PostgreSQL) 9.6.3
-
初始化數據庫
-
使用Postgres數據庫默認的數據文件存儲目錄
- CentOS 6/Redhat 6/Oracle Linux 6
[root@DB-Server-Node1 bin]# service postgresql-9.6 initdb 或者 [root@DB-Server-Node1 bin]# /etc/init.d/postgresql-9.6 initdb
- CentOS 7/Redhat 7/Oracle Linux 7
[root@DB-Server-Node1 bin]# /usr/pgsql-9.6/bin/postgresql96-setup initdb
-
使用自定義的數據存儲目錄
# 創建數據存儲目錄 mkdir -p /data/postgres # 修改目錄權限 chown -R postgres:postgres /data/postgres # 初始化數據庫 su -l postgres -c "/usr/pgsql-9.6/bin/initdb --no-locale -U postgres -E utf8 -D /data/postgres -W"
-
添加Postgres環境變量(可選)
[root@DB-Server-Node1 ~]# vi /etc/profile ... ... # 添加Postgres環境變量 PGDATA=/data/postgres PGHOST=127.0.0.1 PGDATABASE=postgres PGUSER=postgres PGPORT=5432 export PGDATA PGHOST PGDATABASE PGUSER PGPORT
-
修改/etc/init.d/postgresql-9.6中的變量(使用自定義數據目錄)
如果使用自定義數據存放目錄,而不是使用PostgreSQL默認數據目錄時, 需要修改啟動文件中的PGDATA變量,將PGDATA目錄指向自定義的數據目錄, 這樣在使用
service posgresql-9.6 start
命令時才能正確啟動。[root@DB-Server-Node1 ~]# vi /etc/init.d/postgres-9.6 # 修改默認文件目錄到指定的數據目錄 PGDATA=/data/postgres # 保存后退出 :wq!
-
-
配置數據庫訪問
-
修改postgres.conf文件
主要配置參數詳解:
- listen_addresses='localhost'
Postgresql監聽的網卡ip,默認僅僅本地,可以配置多個,使用“,”分割。“*” 代表所有的網卡ip - port=5432
Postgres服務端口 - max_connections=100
最大服務器連接數 - superuser_reserved_connections=3
為管理員保留的專用連接數,普通用戶無法使用這些連接,不能大于max_connections - authentication_timeout=60s
登錄驗證超時時間設置 - ssl=false
是否使用SSL進行連接 - password_encryption=true
當使用create user、alter user管理用戶時,如果沒有顯示進行加密與否的限定,postgresql服務器是否自動進行密碼加密 - shared_buffers=32m
共享緩存,非常重要的性能參數,其最小值為(128k,16k*max_connections) - max_prepared_transactions=5
最大并行prepared 事務,如果為0,則禁止使用prepared事務,最大值與max_connections相同 - temp_buffers=8m
每個會話可以使用的臨時(表)緩存大小 - work_mem=1m
指定內部排序、連接、group等等時,postgresql可以使用的內存大小,超過該值,將使用磁盤臨時文件; 實際使用的內存和該類操作同時執行的數目相乘 - maintenance_work_men=16m
維護語句vacuum、create index等等可以使用的內存大小; 實際使用的內存和該類操作同時執行的數目相乘 - fsync=on
(物理數據)日志必須同步寫入磁盤
可能導致嚴重的性能損失,卻能確保最高的日志數據安全。 - synchronous_commit=on
(邏輯事務數據)日志必須同步寫入磁盤,如果設為on,會立即調用fsync,相當于設置了fsync=on - full_page_writes=on
寫整頁 - wal_buffers=64K
WAL日志緩存大小 - wal_writer_delay=200ms
將wal日志從wal_buffer中寫入磁盤的時間周期 - commit_delay=0ms
事務日志commit后,寫入磁盤的延時。這個設置只有在commit_sibings(并行的多個排隊事務)在延時內存在是才有效 - commit_siblings=5
并行事務數
- listen_addresses='localhost'
-
修改pg_hba.conf
[root@DB-Server-Node1 ~]# vi pg_hba.conf ... ... # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust host all all 192.168.6.0/24 trust # IPv6 local connections: host all all ::1/128 trust
配置說明:
- 格式:
TYPE DATABASE USER ADDRESS METHOD
- 參數:
- TYPE: 值為local和host, Local值表示為主機Socket連接, host代表允許的主機地址連接
- DATABASE: 允許訪問的數據庫名, all代表允許全部數據庫
- USER: 表示允許哪個用戶訪問數據庫, all代表所有用戶都可以訪問
- ADDRESS: 表示允許連接的主機信息,可以使用主機IP地址, 也可以使用網段來表示,如
192.168.1.0/24
表示192.168.1.0網段可以連接 - METHOD: 連接方法, 通常使用的值為md5和trust
- 格式:
-
-
啟動數據庫并測試數據庫
-
啟動Postgres數據庫
[root@DB-Server-Node1 init.d]# service postgresql-9.6 start Starting postgresql-9.6 service: [ OK ]
-
測試數據庫
使用psql命令進行測試。
psql命令詳解:
- -h host, 指定連接的Postgres數據庫IP地址
- -U username: 指定連接數據庫的用戶名
- -d database: 指定連接的數據庫名
- -p port: 指定數據庫連接的服務端口
- -w: 表示不提示用戶輸入密碼
- -W : 表示驗證數據庫用戶密碼
- -l : 表示列出Postgres可用的數據庫信息
示例如下:
[root@DB-Server-Node1 9.6]# psql -h localhost -U postgres -d postgres -W Password for user postgres: psql (9.6.3) Type "help" for help. postgres=#
-
修改用戶密碼
使用默認腳本
service postgresql initdb
或/usr/pgsql-9.6/bin/postgresql96-setup initdb
初始化數據庫時,需要修改用戶的密碼。在修改Postgres用戶密碼時,需要確保以下條件:配置"pg_hba.conf"時需要確定服務器本地址的驗證方法為trust, 即:
host all all 127.0.0.1/32 trust
如果為peer|indent|md5方法時,需要將其修改為trust, 否則登錄時會提醒輸入用戶密碼。切換系統用戶為postgres, 通過
psql -h localhost -U postgres -d postgres
登錄Postgres數據庫,進入數據后,使用alter user postgres with password '設置的新密碼'
來為用戶修改默認密碼。示例如下:
[root@DB-Server-Node1 9.6]# su - postgres -bash-4.2$ psql -h localhost -U postgres -d postgres -w Password for user postgres: psql (9.6.3) Type "help" for help. postgres=# alter user postgres with password '123456'; ALTER ROLE postgres=#
-
設置服務開機自啟動
chkconfig postgresql-9.6 on
-
2. Postgres日常服務管理
啟動數據庫:pg_ctl start -D /data/postgres
重啟數據庫: pg_ctl restart -D /data/postgres
停止數據庫:pg_ctl stop -D /data/postgres
強制重啟:pg_ctl restart -D /data/postgres -m f
強制停止:pg_ctl stop -D /data/postgres -m f
加載配置:pg_ctl reload -D /data/postgres
顯示服務狀態:pg_ctl status -D /data/postgres
連接數據庫: psql -h 127.0.0.1 -U postgres -p 5432 -d postgres -W