Postgresql主從服務搭建
環境信息:win10 虛擬機下實現
Ubuntu 16.04 Postgresql 9.5
主服務 : 192.168.40.129
從服務器:192.168.40.131
主服務配置:
- 修改postgresql.conf文件
sudo vim /etc/postgresql/9.5/main/postgresql.conf
原文件都有這些信息,需要仔細找到修改
listen_addresses = ‘*’
wal_level = hot_standby
synchronous_commit = local – 本地同步級別
max_wal_senders = 2 – 兩臺服務器
wal_keep_segments = 10
保存退出
- 修改pg_hba.conf文件
sudo vim /etc/postgresql/9.5/main/pg_hba.conf
添加
host all all 0.0.0.0/0 md5
host all all 192.168.40.131/32 md5
host replication replica 192.168.40.129/32 md5
host replication replica 192.168.40.131/32 md5
保存退出,重啓Postgresql
sudo service postgresql restart
- 創建用於複製的用戶replica
首先需要 登錄postgresql
myubtu@ubuntu:~$ sudo -u postgres psql
could not change directory to "/home/myubtu": Permission denied
psql (9.5.2)
Type "help" for help.
創建用戶用於複製
創建用戶用於複製
postgres=# CREATE ROLE replica login replication encrypted password 'replica';
CREATE ROLE
postgres=#
主服務器配置結束--------END
從服務器配置
-
停止Postgresql服務
sudo service postgresql stop
-
修改postgresql.conf文件
listen_addresses = ‘*’
wal_level = hot_standby
synchronous_commit = local
max_wal_senders = 2
wal_keep_segments = 10
hot_standby = on
保存並退出。
將數據從主機複製到從機【重點】
要從主服務器同步到從服務器,從服務器上的PostgreSQL主目錄必須由主服務器的主目錄替換。 在從服務器中,登錄postgres用戶
sudo -u postgres psql -- 登錄postgres
備份實際數據庫目錄:
postgres@ubuntu:~$ cd /var/lib/postgresql/9.5/
postgres@ubuntu:~/9.5$ mv main main_back
創建新的主目錄,更改權限:
postgres@ubuntu:~/9.5$ mkdir main/
postgres@ubuntu:~/9.5$ chmod 700 main
此時,使用pg_basebackupR將主目錄從主服務器複製到從服務器:(要輸入密碼replica)
postgres@ubuntu:~/9.5$ pg_basebackup -h 192.168.40.129 -U replica -D /var/lib/postgresql/9.5/main -P
Password:
傳輸完成後,在主目錄中創建一個新的recovery.conf文件,並粘貼以下內容:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=usr_strong_pwd'
trigger_file = '/tmp/postgresql.trigger.5432'
保存退出,更改文件權限:
postgres@ubuntu:~/9.5$ vim main/recovery.conf
postgres@ubuntu:~/9.5$
postgres@ubuntu:~/9.5$ chmod 600 main/recovery.conf
重啓Postgresql。從服務配置結束。
驗證
- 主服務登錄驗證:
myubtu@ubuntu:/home$ sudo -u postgres psql
[sudo] password for myubtu:
psql (9.5.2)
Type "help" for help.
postgres=# select client_addr,sync_state from pg_stat_replication;
client_addr | sync_state
----------------+------------
192.168.40.131 | async
(1 row)
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
f
(1 row)
出現 192.168.40.131 | async 表示成功!!!
-
測試在數據庫添加新表:
129上新建表後,從庫131出現所添加表 -
測試從庫修改數據(從庫修改報錯。權限限制)
131從庫中對錶中數據做修改報錯(從庫只有查詢權限,無法添加、修改)
參考連接
https://blog.csdn.net/pollydejia/article/details/96321703
https://www.cnblogs.com/guoximing/p/9429009.html
https://www.cnblogs.com/yjf512/p/4499547.html
https://my.oschina.net/robin3d/blog/2907024
https://blog.csdn.net/wlwlwlwl015/article/details/53287855
https://www.linuxidc.com/Linux/2017-08/146190.htm
https://blog.51cto.com/wn2100/2238996