流復制:可以從實例級復制出一個與主庫一摸一樣的從庫(也稱之為備庫)
流復制同步方式有同步、異步兩種,如果主節(jié)點和備節(jié)點不是很忙,通常異布模式下備庫和主庫的延遲時間控制在毫秒級
另一種方式為邏輯復制,也稱之為選擇性復制,可以做到基于表級別的復制。選擇需要邏輯復制的表,而不是復制實例上所有數(shù)據(jù)庫的所有表
物理復制是基于實例級的復制,只能復制整個postgresql實例
WAL日志記錄數(shù)據(jù)庫的變化,格式為二進制格式。當主機出現(xiàn)異常斷電時,如果WAL文件寫入成功,但還沒來得及刷新數(shù)據(jù)文件,當數(shù)據(jù)庫再次啟動時會根據(jù)WAL日志文件信息進行事務前滾。從而恢復數(shù)據(jù)庫達到一致性狀態(tài)
盡管流復制和邏輯復制都是基于WAL,但兩者有本質(zhì)不同,流復制是基于WAL物理復制,邏輯復制是基于WAL邏輯分析,將WAL解析成一種清晰、易于理解的格式
流復制是物理復制,其核心原理是主庫將預寫日志W(wǎng)AL日志流發(fā)送給備庫,備庫接收到WAL日志流后進行重做,因此流復制是基于WAL日志文件的物理復制
邏輯復制核心原理也是基于WAL,邏輯復制會根據(jù)預先設置好的規(guī)則解析WAL日志,將WAL二進制文件解析成一定格式的邏輯變化信息,比如從WAL中解析指定表發(fā)生的DML邏輯變化信息,之后主庫將邏輯變化信息發(fā)送給備庫,備庫收到WAL邏輯解析變化信息后再應用日志
流復制只能對postgresql實例級進行復制,而邏輯復制能夠?qū)?shù)據(jù)庫表級進行復制
流復制能對DDL操作進行復制,比如主表新建表、給已有表加減字段時會自動同步到備庫,而邏輯復制主庫上的DDL操作不會復制到備庫
流復制主庫可讀寫,但從庫只運行查詢不允許寫入,而邏輯復制的從庫可讀寫
流復制要求postgresql大版本必須一致,邏輯復制支持跨postgresql大版本
異步流復制:主庫上提交事務時不需要等待備庫接收W AL日志流并寫入到備庫WAL日志文件時便返回成功,如果主庫異常宕機,主庫上已提交的事務可能還沒來得及發(fā)送給備庫,就會造成備庫手機丟失,備庫丟失的數(shù)量和WAL復制延遲有關(guān),WAL復制延遲越大,備庫上丟失的數(shù)據(jù)量越大。而同步流復制相反。
同步流復制主主庫上提交事務時需要等待備庫接收并WAL日志,當主庫至少收到一個備庫發(fā)回的確認信息時便返回成功。
異步流復制部署主要?兩種方式:一種方式是拷貝數(shù)據(jù)文件方式,另一種方式是通過pg_basebackup命令行工具。