最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL流復(fù)制(主從復(fù)制)詳細教程

 更新時間:2025年11月06日 10:33:13   作者:裴東青  
本文詳細介紹了PostgreSQL流復(fù)制技術(shù),流復(fù)制通過WAL日志實時同步主從庫數(shù)據(jù),支持異步和同步兩種模式,具有一定的參考價值,感興趣的可以了解一下

一、流復(fù)制簡介

在數(shù)據(jù)庫業(yè)務(wù)中,為了防止單點故障的發(fā)生、提高數(shù)據(jù)庫服務(wù)器的服務(wù)性能,一般都會采用「主從復(fù)制」集群來保障數(shù)據(jù)庫中數(shù)據(jù)的高可用。

而在 PostgreSQL 中,主從復(fù)制有其特定的技術(shù)名稱 ——流復(fù)制(Streaming Replication)。主從復(fù)制是所有數(shù)據(jù)庫主從架構(gòu)的統(tǒng)稱,而流復(fù)制是 PostgreSQL 實現(xiàn)主從復(fù)制的核心技術(shù),也是最常用的方式,特點是從庫實時(流式)接收主庫的 WAL 日志并應(yīng)用,延遲較低。PostgreSQL 中更推薦用 “主庫(Primary)” 和 “從庫(Standby)” 替代 “Master/Slave” 的說法。

此外,PostgreSQL 的流復(fù)制還可細分:

  • 異步流復(fù)制(默認):主庫寫入數(shù)據(jù)后無需等待從庫確認,性能高,可能有少量延遲。
  • 同步流復(fù)制:主庫寫入數(shù)據(jù)后,必須等待從庫確認已接收 WAL 日志才返回成功,安全性高但性能略低。

二、流復(fù)制原理與步驟

PostgreSQL 流復(fù)制的核心依賴于其WAL(Write-Ahead Logging,預(yù)寫日志)機制,這是PostgreSQL 保證數(shù)據(jù)一致性的基礎(chǔ),也是復(fù)制的 “數(shù)據(jù)源”。

1. WAL 日志的作用

  • 主庫執(zhí)行任何數(shù)據(jù)修改操作(增刪改)時,會先將操作記錄寫入 WAL 日志(類似 “操作日志”,相當于MySQL中的binlog),再更新實際數(shù)據(jù)文件。
  • 即使主庫突然崩潰,重啟后可通過 WAL 日志恢復(fù)未完成的操作,保證數(shù)據(jù)一致性。
  • 對復(fù)制而言:WAL 日志是主從數(shù)據(jù)同步的 “橋梁”—— 從庫通過獲取并應(yīng)用主庫的 WAL 日志,即可復(fù)現(xiàn)主庫的所有操作,保持數(shù)據(jù)一致。

2. 流復(fù)制的核心進程

主庫(Primary)

wal_sender進程:當從庫連接主庫時,主庫會啟動wal_sender進程,負責(zé)將 WAL 日志實時發(fā)送給從庫。

從庫(Standby)

wal_receiver 進程:從庫啟動后,會啟動 wal_receiver 進程,主動連接主庫wal_sender,接收 WAL 日志并寫入從庫的 WAL 文件。

startup 進程:負責(zé)讀取本地接收的 WAL 日志,并將日志中的操作應(yīng)用到從庫的數(shù)據(jù)文件中,最終實現(xiàn)數(shù)據(jù)同步。

3.流復(fù)制的同步步驟

1.主庫每執(zhí)行一次數(shù)據(jù)修改(如插入、更新),都會生成新的 WAL 記錄并寫入本地 WAL 文件。

2.從庫啟動后,wal_receiver 進程根據(jù) postgresql.conf 中 primary_conninfo 的配置(主庫 IP、復(fù)制用戶、密碼),主動連接主庫的 5432 端口。

3.主庫驗證從庫的連接(通過 pg_hba.conf 配置的權(quán)限)后,啟動 wal_sender 進程,開始向從庫實時流式傳輸新生成的 WAL 日志(從備份結(jié)束的位置開始,避免重復(fù)傳輸)。

4.從庫的 wal_receiver 接收 WAL 日志后,寫入本地的 WAL 文件。從庫的 startup 進程讀取本地 WAL 文件,將日志中的操作逐條應(yīng)用到從庫的數(shù)據(jù)文件中,最終實現(xiàn)與主庫的數(shù)據(jù)一致。

三、流復(fù)制的實現(xiàn)

  • 操作系統(tǒng):CentOS7
  • PostgreSQL版本:psql (PostgreSQL) 13.22
  • 主庫IP:11.0.0.136
  • 從庫IP:11.0.0.137

1、準備工作

# 1.關(guān)閉防火墻
     systemctl stop firewalld
     systemctl disable firewalld
# 或者開放5432端口
	 firewall-cmd --add-port=5432/tcp --permanent
	 firewall-cmd --reload
# 2.關(guān)閉SELINUX
     setenforce 0
     sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 3.同步時間
     ntpdate ntp.ntsc.ac.cn
# 4.確保你的YUM源可用

2、安裝PostgreSQL(主從庫都安裝)

進入官網(wǎng):https://www.postgresql.org/download/

選擇相應(yīng)操作系統(tǒng)和版本

# 1、安裝 PostgreSQL 官方的 YUM 源配置包
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 2、安裝 PostgreSQL 的服務(wù)器端程序
yum install -y postgresql13-server
# 3、初始化 PostgreSQL 的數(shù)據(jù)庫集群
/usr/pgsql-13/bin/postgresql-13-setup initdb
# 4、啟動 PostgreSQL 并設(shè)置開機自啟
systemctl enable postgresql-13
systemctl start postgresql-13
# 5、驗證安裝
psql --version

3、主庫配置

1、修改主庫核心配置

vim /var/lib/pgsql/13/data/postgresql.conf 
# 添加以下內(nèi)容
-----------------------------------------------------------------------------------------
# 允許所有IP連接(生產(chǎn)環(huán)境可指定從庫IP)
listen_addresses = '*'
# WAL日志級別(至少為replica才能支持流復(fù)制)
wal_level = replica
# 允許的最大復(fù)制連接數(shù)(至少1,建議3-5)
max_wal_senders = 3
# 保留的WAL日志大?。ǚ乐箯膸焱綍rWAL被刪除,建議1GB)
wal_keep_size = 1GB
# 開啟歸檔模式(流復(fù)制依賴歸檔)
archive_mode = on
# 歸檔命令(暫時用/bin/true表示不實際歸檔,僅開啟模式)
archive_command = '/bin/true'
-----------------------------------------------------------------------------------------

2、配置主庫訪問控制

vim /var/lib/pgsql/13/data/pg_hba.conf
# 添加以下內(nèi)容
-----------------------------------------------------------------------------------------
# 允許從庫(11.0.0.137)通過 replica 用戶進行復(fù)制(md5 密碼驗證)
# host  數(shù)據(jù)庫 / 功能     用戶名  	       從庫IP  				 認證方式
host    replication     replica         11.0.0.137/32           md5
-----------------------------------------------------------------------------------------

3、創(chuàng)建復(fù)制專用用戶(replica)

# 1、切換到postgres用戶
su - postgres
# 2、進入數(shù)據(jù)庫
psql
# 3、創(chuàng)建復(fù)制專用用戶,設(shè)置密碼
CREATE ROLE replica REPLICATION LOGIN ENCRYPTED PASSWORD 'peidongqing@123';
# 4、 退出psql
\q
# 5、退出postgres用戶
exit
# 6、重啟主庫
systemctl restart postgresql-13

4、從庫配置

1、停止從庫服務(wù)并清空默認數(shù)據(jù)

從庫需使用主庫的備份數(shù)據(jù)初始化,因此先刪除默認數(shù)據(jù)

# 停止從庫PostgreSQL服務(wù)
systemctl stop postgresql-13
# 清空從庫數(shù)據(jù)目錄(默認路徑)
rm -rf /var/lib/pgsql/13/data/*

2、從主庫同步基礎(chǔ)數(shù)據(jù)

# 切換到postgres用戶(確保權(quán)限正確)
su - postgres
# 執(zhí)行基礎(chǔ)備份(從主庫11.0.0.136同步數(shù)據(jù)到從庫)
pg_basebackup -h 11.0.0.136 -U replica -D /var/lib/pgsql/13/data/ -Fp -Xs -P

執(zhí)行后會提示輸入密碼,輸入設(shè)置的replica用戶密碼peidongqing@123,等待備份完成

  • -h 11.0.0.136:主庫 IP
  • -U replica:復(fù)制用戶
  • -D:從庫數(shù)據(jù)目錄(需與主庫一致)
  • -Fp:輸出格式為原始文件(非壓縮)
  • -Xs:備份時自動復(fù)制 WAL 日志(確保數(shù)據(jù)一致性)
  • -P:顯示進度

3、配置從庫連接主庫

# 切換到root用戶,編輯從庫配置文件
vim /var/lib/pgsql/13/data/postgresql.conf
-----------------------------------------------------------------------------------------
# 從庫連接主庫的信息
primary_conninfo = 'host=11.0.0.136 port=5432 user=replica password=peidongqing@123'
# 允許從庫只讀查詢
hot_standby = on
-----------------------------------------------------------------------------------------

4、創(chuàng)建standby.signal文件,啟用從庫模式

# 切換到postgres用戶,創(chuàng)建信號文件
su - postgres
touch /var/lib/pgsql/13/data/standby.signal
# 退出postgres用戶
exit
# 啟動從庫服務(wù)
systemctl start postgresql-13
systemctl enable postgresql-13

5、驗證主從復(fù)制

主從驗證均是通過postgres用戶登錄數(shù)據(jù)庫驗證

# 切換 postgres 用戶
su - postgres
# 進入數(shù)據(jù)庫
psql

1、連接狀態(tài)驗證

主庫

SELECT client_addr, state FROM pg_stat_replication;

# 成功輸出
 client_addr |   state   
-------------+-----------
 11.0.0.137  | streaming
(1 行記錄)

從庫

SELECT status FROM pg_stat_wal_receiver;

# 成功輸出
  status   
-----------
 streaming
(1 行記錄)

2、數(shù)據(jù)同步驗證

主庫

# 創(chuàng)建數(shù)據(jù)表
CREATE TABLE test_replica (id int);
# 插入數(shù)據(jù)
INSERT INTO test_replica VALUES (11111);

從庫

SELECT * FROM test_replica;

# 成功輸出
    id 
---------
  111111
(1 行記錄)

總結(jié)

通過以上步驟,PostgreSQL 13 一主一從流復(fù)制架構(gòu)已搭建完成:

  • 主庫(11.0.0.136)負責(zé)寫入數(shù)據(jù),并通過 WAL 日志同步到從庫。
  • 從庫(11.0.0.137)實時接收主庫日志,保持數(shù)據(jù)一致,支持只讀查詢。
  • 若主庫故障,可手動將從庫提升為主庫。

到此這篇關(guān)于PostgreSQL流復(fù)制(主從復(fù)制)詳細教程的文章就介紹到這了,更多相關(guān)PostgreSQL流復(fù)制(主從復(fù)制)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Postgresql刪除數(shù)據(jù)庫表中重復(fù)數(shù)據(jù)的幾種方法詳解

    Postgresql刪除數(shù)據(jù)庫表中重復(fù)數(shù)據(jù)的幾種方法詳解

    本文詳細講解了Postgresql刪除數(shù)據(jù)庫表中重復(fù)數(shù)據(jù)的幾種方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • pgsql查詢優(yōu)化之模糊查詢實例詳解

    pgsql查詢優(yōu)化之模糊查詢實例詳解

    這篇文章主要給大家介紹了關(guān)于pgsql查詢優(yōu)化之模糊查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用pgsql具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • PostgreSQL表膨脹問題解析及解決方案

    PostgreSQL表膨脹問題解析及解決方案

    表膨脹是指表的數(shù)據(jù)和索引所占文件系統(tǒng)的空間在有效數(shù)據(jù)量并未發(fā)生大的變化的情況下不斷增大,這種現(xiàn)象會導(dǎo)致關(guān)系文件被大量空洞填滿,從而浪費大量的磁盤空間,本文給大家介紹了PostgreSQL表膨脹問題解析及解決方案,需要的朋友可以參考下
    2024-11-11
  • 用PostgreSQL數(shù)據(jù)庫做地理位置app應(yīng)用

    用PostgreSQL數(shù)據(jù)庫做地理位置app應(yīng)用

    項目中用到了postgreSQL中的earthdistance()函數(shù)功能計算地球上兩點之間的距離,中文的資料太少了,我找到了一篇 英文的、講的很好的文章,特此翻譯,希望能夠幫助到以后用到earthdistance的同學(xué)
    2014-03-03
  • 關(guān)于PostgreSQL截取某個字段中的部分內(nèi)容進行排序的問題

    關(guān)于PostgreSQL截取某個字段中的部分內(nèi)容進行排序的問題

    這篇文章主要介紹了PostgreSQL截取某個字段中的部分內(nèi)容進行排序,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • PostgreSQL事務(wù)回卷實戰(zhàn)案例詳析

    PostgreSQL事務(wù)回卷實戰(zhàn)案例詳析

    前段時間在公司小范圍做了一個關(guān)于PG事務(wù)實現(xiàn)的講座,最后總結(jié)了一個摘要性的東西,分享一下,這篇文章主要給大家介紹了關(guān)于PostgreSQL事務(wù)回卷實戰(zhàn)案例的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • PostgreSQL教程(三):表的繼承和分區(qū)表詳解

    PostgreSQL教程(三):表的繼承和分區(qū)表詳解

    這篇文章主要介紹了PostgreSQL教程(三):表的繼承和分區(qū)表詳解,本文講解了多表繼承、 繼承和權(quán)限、什么是分區(qū)表、分區(qū)表實現(xiàn)、分區(qū)和約束排除等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • PostgreSQL數(shù)據(jù)庫如何定期清理歸檔(pg_wal)日志

    PostgreSQL數(shù)據(jù)庫如何定期清理歸檔(pg_wal)日志

    在?般的?產(chǎn)環(huán)境中,數(shù)據(jù)庫都需要開啟歸檔模式,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL數(shù)據(jù)庫如何定期清理歸檔(pg_wal)日志的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • PostgreSQL 復(fù)制表的 5 種方式詳解

    PostgreSQL 復(fù)制表的 5 種方式詳解

    PostgreSQL 提供了多種不同的復(fù)制表的方法,它們的差異在于是否需要復(fù)制表結(jié)構(gòu)或者數(shù)據(jù),這篇文章主要介紹了PostgreSQL 復(fù)制表的 5 種方式,需要的朋友可以參考下
    2023-01-01
  • PostgreSQL數(shù)據(jù)庫儲存空間不足的解決方案

    PostgreSQL數(shù)據(jù)庫儲存空間不足的解決方案

    在使用 PostgreSQL 數(shù)據(jù)庫時,可能會遇到存儲空間不足的問題,這個問題不僅會影響數(shù)據(jù)庫的正常運行,還可能導(dǎo)致數(shù)據(jù)丟失或應(yīng)用程序出現(xiàn)故障,因此,了解如何應(yīng)對這種情況至關(guān)重要,所以本文給大家就介紹了PostgreSQL數(shù)據(jù)庫儲存空間不足的解決方案,需要的朋友可以參考下
    2024-07-07

最新評論

达尔| 东光县| 上高县| 探索| 大竹县| 鸡泽县| 麻城市| 六盘水市| 磐安县| 饶河县| 沾益县| 开原市| 交口县| 武鸣县| 镶黄旗| 秦皇岛市| 昔阳县| 防城港市| 姜堰市| 新兴县| 金秀| 滦平县| 曲阜市| 肃宁县| 辽阳市| 元氏县| 东阿县| 湖北省| 咸丰县| 黄龙县| 剑阁县| 罗山县| 安达市| 和田县| 泉州市| 泊头市| 昌都县| 永嘉县| 孟连| 泾阳县| 邵东县|