一:安裝環境
查看一下安裝環境:cat /etc/centos-release
CentOS Linux release 7.7.1908 (Core)
二:軟件下載
https://www.postgresql.org/download/
Select your operating system family: 選擇 Linux
Select your Linux distribution: 選擇 Red Hat/Rocky/CentOS
然後頁面會跳轉至: https://www.postgresql.org/download/linux/redhat/
再選擇:
1. Select version: 15
2.Select platform: Red Hat Enterprise, CentOS, Scientific or Oracle version 7
3. Select architecture: x86_64
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql15-server sudo /usr/pgsql-15/bin/postgresql-15-setup initdb sudo systemctl enable postgresql-15 sudo systemctl start postgresql-15
在執行 sudo yum install -y postgresql15-server 過程中,有可能報錯誤 Requires: libzstd.so.1()(64bit)
可安裝 yum install epel-release 命令進行解決。
在執行 初始化 sudo /usr/pgsql-15/bin/postgresql-15-setup initdb 執行完成後: Initializing database ... OK
執行 sudo systemctl enable postgresql-15 執行完成後:
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-15.service to /usr/lib/systemd/system/postgresql-15.service.
執行 sudo systemctl start postgresql-15
安裝完成。
三:配置
查看pgsql的安裝目錄:find /usr -wholename '*/bin/postgres'
查看PGSQL端口:netstat -a | grep PGSQL
查找pg_hba.conf文件: find / -name "*pg_hba.conf*"
一般是如下路徑:
/var/lib/pgsql/15/data/pg_hba.conf
然後編輯文件
vi /var/lib/pgsql/15/data/pg_hba.conf
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
修改爲
host all all 0.0.0.0/0 scram-sha-256
用navicat連接pgsql時報錯:
could not connect to server: Connection refused(0x0000274D/10061) Is the server running on host "192.168.113.154" and accepting TCP/IP connections on 5432?
是pgsql 未監聽所有的IP,解決方案:
vi /var/lib/pgsql/15/data/postgresql.conf 找到60行左右
添加如下:listen_addresses = '*'
再得啓一下pgsql : sudo systemctl restart postgresql-15
如果是在開啓防火牆的情況:
查看已打開端口:firewall-cmd --list-ports, 如沒沒有開通5432端口,則執行:
firewall-cmd --zone=public --port-port=5432/tcp --permanent firewall-cmd --reload firewall-cmd --list-ports
查看已打開的服務:firewall-cmd --list-service ,如果沒有開通則開通PostgreSQL服務:
firewall-cmd --permanent --add-service=postgresql --permanent firewall-cmd --reload firewall-cmd --list-service
進入到postgres 賬戶 su - postgres
進入到 psql命令行:
執行如下操作 :
ALTER USER postgres WITH PASSWORD 'Swd.1202evb#';
CREATE ROLE replica login replication encrypted password 'replica';
輸入以下命令退出 PostgreSQL 提示符: \q
Ctrl + D退出psql控制檯
完成修改後,即可用navicat 16連接到pgsql
參考鏈接:https://www.cnblogs.com/yyl001/p/16469612.html
==================================主從配置=======================================================
一:
進入 su - postgres
進入 psql
create role replica login replication encrypted password 'replication123';
含義:
登錄名爲:replica
權限授予:login replication
密碼爲:replication123
最後一定要加一個 ;
二:vi /var/lib/pgsql/15/data/postgresql.conf
listen_addresses = '*' # 設置監聽的ip,* 爲允許所有 wal_level = replica # wal日誌寫入級別,要使用流複製,必須使用replica或更高級別 full_page_writes = on # 可以防止意外宕機後部分數據無法寫入 wal_log_hints = on # 沒太懂這個參數的具體含義,但可能會影響後續pg_rewind的使用,所以把它打開,官方描述:also do full page writes of non-critical updates max_wal_senders = 10 # 設置流複製鏈接最大值 hot_standby = on # 打開熱備 wal_keep_segments = 64 # 設置流複製保留的最log數目 unix_socket_directories = '.' # 指定服務器用於監聽來自客戶端應用的連接的 Unix 域套接字目錄。 unix_socket_permissions = 0777 # 設置 Unix 域套接字的訪問權限。
listen_addresses = '*' 在60行左右
wal_level = replica 在206行左右
full_page_writes = on 在220行左右
wal_log_hints = on 在221行左右 把off 改爲 on
max_wal_senders = 10 在309行左右
hot_standby = on 在336行左右
如三下個參數,新版本可能沒有,可以不設置
wal_keep_segments = 64 # 設置流複製保留的最log數目
unix_socket_directories = '.' # 指定服務器用於監聽來自客戶端應用的連接的 Unix 域套接字目錄。
unix_socket_permissions = 0777 # 設置 Unix 域套接字的訪問權限。
三:編輯 vi /var/lib/pgsql/15/data/pg_hba.conf ,在文件的最後增加如下內容:
host replication replica 0.0.0.0/0 scram-sha-256
四: 重啓一下主庫:sudo systemctl restart postgresql-15
從庫:
一:停止從庫的pgsql服務
sudo systemctl stop postgresql-15
二:清空從庫的數據(刪除data下的所有文件)
rm -rf /var/lib/pgsql/15/data/*
三:pg_basebackup -h 172.27.241.252 -p 5432 -U replica -Fp -Xs -Pv -R -D /var/lib/pgsql/15/data/
然後輸入主庫設置的密碼:replication123
給 data 目錄授權
chmod -R 700 /var/lib/pgsql/15/data
chgrp -R postgres /var/lib/pgsql/15/data
chown -R postgres /var/lib/pgsql/15/data
四:此時data目錄下會出現standby.signal 只有一個文件,裏邊什麼內容都沒有,加上如下一句話:
vi standby.signal
standby_mode = 'on'
修改 postgresql.conf,
vi postgresql.conf
[root@localhost data]# vim postgresql.conf #從機信息和連接用戶 primary_conninfo = 'host=192.168.5.131 user=replica password=123456' #說明恢復到最新狀態 recovery_target_timeline = latest #大於主節點,正式環境重新考慮此值的大小 max_connections = 120 #說明這臺機器不僅可以用戶數據歸檔,還可以用於數據查詢 hot_standby = on #流備份的最大延遲時間 max_standby_archive_delay = 30s #向主機彙報本地狀態的間隔時間 wal_receiver_status_interval = 10s #出現錯誤複製,向主機反饋 hot_standby_feedback = on
重啓數據庫:sudo systemctl start postgresql-15
實現了主從的配置搭建