PostgreSQL10 新特性(2): 邏輯複製

概述

    邏輯複製(Logical Replication)是PG複製功能中又添加的一個重要特性。邏輯複製相對物理複製,以前版本的流複製就是用的物理複製,是針對實例級別作的數據複製;而邏輯複製是針對表級別作的數據複製,是一種複製粒度更細,更靈活的複製機制。sql

特性介紹

    下圖是邏輯複製的流程圖:數據庫

   

    邏輯複製也是基於WAL進行的複製,slave端經過邏輯解碼對數據進行REDO。post

    下面介紹上圖中的兩個對象PUBLICATION和SUBSCRIPTION.編碼

    1. PUBLICATION對象

        publication對象是邏輯複製過程當中,master節點建立的對象,用於對複製表及複製操做的管理。spa

語法
CREATE PUBLICATION 名稱
[ FOR TABLE [ ONLY ] 表名 [ * ] [, ...]
| FOR ALL TABLES ]
[ WITH ( publication_parameter [= 值] [, ... ] ) ]

參數說明:
//FOR TABLE  表示要複製的表,能夠經過’,’定義多個表。
//FOR ALL TABLES	表示數據庫的全部表都要複製。
//WITH  表的DML操做行爲,忽略表示所有DML操做。
//ONLY 若是忽略ONLY,則繼承該複製表的全部表也會被複制。

      一個PUBLICATION對象能夠註冊一個或多個表。也能夠選擇DML操做進行復制。一個表同時也能夠被多個PUBLICATION註冊。postgresql

     2. SUBSCRIPTION對象

        subscription對象是邏輯複製過程彙總,slave節點建立的對象。用於鏈接master節點的publication對象。code

語法
CREATE SUBSCRIPTION subscription_name
CONNECTION 'conninfo'
PUBLICATION publication_name [, ...]
[ WITH ( subscription_parameter [= 值] [, ... ] ) ]

參數說明:
//CONNECTION	鏈接master節點的字符串信息
//PUBLICATION	master複製PUBLICATION對象
//WITH 表示DML操做,忽略表示所有DML操做

    3. 邏輯複製示例

master節點:
1, 配置postgresql.conf文件
	listen_addresses = '*'
	wal_level = logical 

2. 配置pg_hba.conf文件
	host    replication     all             0.0.0.0/0            trust

3. 建立複製表對象
postgres=# create schema myschema;
CREATE SCHEMA
postgres=# CREATE TABLE myschema.test(n int, t text);
CREATE TABLE

4. 建立publication對象
postgres=# CREATE PUBLICATION mypub FOR TABLE myschema.test;
CREATE PUBLICATION


slave節點:
5. 建立同名的模式和表(必須同名,不然複製失敗)
postgres=# create schema myschema;
CREATE SCHEMA
postgres=# CREATE TABLE myschema.test(n int, t text);
CREATE TABLE

6. 建立subscription對象
postgres=# CREATE SUBSCRIPTION mysub CONNECTION 'host=192.168.100.132 port=5432 user=postgres dbname=postgres' PUBLICATION mypub;
NOTICE:  created replication slot "mysub" on publisher
CREATE SUBSCRIPTION

7. 在master節點插入數據
postgres=# insert into myschema.test values (10);
INSERT 0 1
postgres=# insert into myschema.test values (20);
INSERT 0 1


8. 在slave節點查詢
postgres=# select * from myschema.test;
 n  | t 
-----+---
 10  | 
 20  | 
(2 行記錄)

 

    4. 系統表

        對於邏輯複製,系統增長如下系統表用於對邏輯複製相關對象和參數的記錄:對象

pg_publication -- 記錄PUBLICATION對象信息
pg_publication_rel -- 記錄PUBLICATION對象和表之間的對應關係
pg_publication_tables -- 記錄PUBLICATION對象和表名之間的關係
pg_subscription -- 記錄SUBSCRIPTION對象信息
v.pg_subscription_rel -- 記錄SUBSCRIPTION對象和表之間的對應關係

        

    5. 進程

        

        PG10爲邏輯複製新增一bgworker進程,用於完成對邏輯複製的處理。繼承

 

    6. 其餘說明 

    i. 邏輯複製standby端也能夠進行寫操做,可是不能同步到primary端。(區別流複製)進程

    ii. 當publication對象table已經有數據了,建立subscription後,默認會把數據複製到subscription端。

    iii. 對publication對象table進行alter table和truncate table時,修改不會複製到subscription端(複製只作DML操做)。

    iv. Publication對象的table的index、trigger不會複製到subscription端。

    v. 分區表不能做爲publication的對象table,可是分區能夠。

    vi. 邏輯複製能夠在不一樣編碼之間進行數據複製(已經進行內部轉換)。

相關文章
相關標籤/搜索