本文章給出了從阿里云數(shù)據(jù)庫(kù) RDS PostgreSQL 版遷移到 AWS RDS for PostgreSQL 的步驟。由于 AWS 的 PostgreSQL 從 10.4 版本才開(kāi)始支持原生的邏輯復(fù)制窖维,本文以 AWS RDS for PostgreSQL 10.4 版本為例少孝。
準(zhǔn)備阿里云 PostgreSQL 環(huán)境
-
進(jìn)入阿里云 RDS 控制臺(tái)绑洛,點(diǎn)擊「創(chuàng)建實(shí)例」敞贡,類型選擇「PostgreSQL 10 」,點(diǎn)擊「下一步:實(shí)例配置」心褐,「下一步:確認(rèn)訂單」舔涎,「去支付」
-
在控制臺(tái)實(shí)例列表中,等待運(yùn)行狀態(tài)為「運(yùn)行中」逗爹,選擇「操作 - 管理」
-
在左側(cè)選擇「賬號(hào)管理 - 創(chuàng)建賬號(hào)」亡嫌,數(shù)據(jù)庫(kù)賬號(hào):
aws
,賬號(hào)類型「高權(quán)限賬號(hào)」掘而,密碼:Awsaws@123
挟冠,點(diǎn)擊「創(chuàng)建」
-
在左側(cè)選擇「數(shù)據(jù)安全性 - 白名單設(shè)置 - 添加白名單分組」,分組名稱:
aws
袍睡,組內(nèi)白名單:0.0.0.0/0
知染,點(diǎn)擊「確定」
-
在左側(cè)選擇「數(shù)據(jù)庫(kù)連接 - 申請(qǐng)外網(wǎng)地址」,點(diǎn)擊「確定」
-
在左側(cè)選擇「參數(shù)設(shè)置」斑胜,修改參數(shù) wal_level 的運(yùn)行參數(shù)值為
logical
控淡,點(diǎn)擊「提交參數(shù)」,點(diǎn)擊「確認(rèn)」(注意本步驟操作會(huì)重啟數(shù)據(jù)庫(kù)止潘,生產(chǎn)環(huán)境請(qǐng)?jiān)诰S護(hù)時(shí)間段操作)
安裝 PostgreSQL 客戶端:
Mac:
brew doctor
brew update
brew install libpq
brew link --force libpq
Ubuntu掺炭、Debian:
sudo apt-get update
sudo apt-get install postgresql-client
Windows:https://www.postgresql.org/download/windows/
連接數(shù)據(jù)庫(kù):
psql -h <步驟6里的外網(wǎng)地址> -p 1921 -U <步驟4里的用戶名> -W -d postgres
執(zhí)行以下命令創(chuàng)建測(cè)試數(shù)據(jù):
# 創(chuàng)建測(cè)試數(shù)據(jù)庫(kù),名稱:aliyun
CREATE DATABASE aliyun;
\c aliyun;
# 創(chuàng)建兩張測(cè)試表格
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
full_name TEXT
);
CREATE TABLE orders (
order_id SERIAL,
dish_name TEXT,
customer_id INTEGER REFERENCES customers (id)
);
# 插入測(cè)試數(shù)據(jù)
INSERT INTO customers (id, full_name) VALUES (1, 'Andy');
INSERT INTO orders (order_id, dish_name, customer_id) VALUES (1, 'Andy_Dish', 1);
# 確認(rèn)數(shù)據(jù)結(jié)果
SELECT * FROM customers;
SELECT * FROM orders;
準(zhǔn)備 Amazon RDS for PostgreSQL 環(huán)境
-
登錄 Amazon RDS 控制臺(tái)凭戴,選擇「參數(shù)組」涧狮,點(diǎn)擊「創(chuàng)建參數(shù)組」,參數(shù)組系列 選擇 「postgres10」,組名:
aliyun-aws
, 描述:aliyun-aws
, 點(diǎn)擊「創(chuàng)建」
-
點(diǎn)擊創(chuàng)建好的參數(shù)組者冤,修改參數(shù) rds.logical_replication 值為 1吧享,點(diǎn)擊「保存修改」
-
選擇左側(cè) 「數(shù)據(jù)庫(kù)」,點(diǎn)擊「創(chuàng)建數(shù)據(jù)庫(kù)」
-
選擇「標(biāo)準(zhǔn)創(chuàng)建」譬嚣,引擎類型「PostgreSQL」钢颂,版本「PostgreSQL 10.4-R1」,數(shù)據(jù)庫(kù)實(shí)例標(biāo)識(shí)符:
ali-aws
拜银,主用戶名:aws
殊鞭,密碼:Awsaws-123
,初始數(shù)據(jù)庫(kù)名稱:aliyun
尼桶,數(shù)據(jù)庫(kù)參數(shù):ali-aws
操灿,「公開(kāi)訪問(wèn)」選擇「是」,其它配置參考下圖或保持默認(rèn)泵督,點(diǎn)擊「創(chuàng)建數(shù)據(jù)庫(kù)」
-
修改數(shù)據(jù)庫(kù)VPC安全組趾盐,允許數(shù)據(jù)庫(kù)的
5432
端口訪問(wèn)
-
連接數(shù)據(jù)庫(kù):
psql -h <終端節(jié)點(diǎn)> -p 5432 -U <步驟5里的主戶名> -W -d <步驟5里的初始數(shù)據(jù)庫(kù)名稱>
創(chuàng)建數(shù)據(jù)表:
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
full_name TEXT
);
CREATE TABLE orders (
order_id SERIAL,
dish_name TEXT,
customer_id INTEGER REFERENCES customers (id)
);
運(yùn)行邏輯復(fù)制進(jìn)行數(shù)據(jù)遷移
登錄阿里云數(shù)據(jù)庫(kù):
psql -h <阿里云數(shù)據(jù)庫(kù)外網(wǎng)地址> -p 1921 -U <數(shù)據(jù)庫(kù)用戶名> -W -d aliyun
設(shè)置阿里云數(shù)據(jù)庫(kù) PUBLICATION:
CREATE PUBLICATION pub_orders FOR TABLE orders;
CREATE PUBLICATION pub_customers FOR TABLE customers;
登錄AWS數(shù)據(jù)庫(kù):
psql -h <AWS數(shù)據(jù)庫(kù)終端節(jié)點(diǎn)> -p 5432 -U <數(shù)據(jù)庫(kù)用戶名> -W -d aliyun
設(shè)置 AWS 數(shù)據(jù)庫(kù) SUBSCRIPTION:
CREATE SUBSCRIPTION sub_orders CONNECTION 'host=<阿里云數(shù)據(jù)庫(kù)外網(wǎng)地址> port=1921 user=<數(shù)據(jù)庫(kù)用戶名> dbname=aliyun password=<數(shù)據(jù)庫(kù)密碼>' PUBLICATION pub_orders;
CREATE SUBSCRIPTION sub_customers CONNECTION 'host=<阿里云數(shù)據(jù)庫(kù)外網(wǎng)地址> port=1921 user=<數(shù)據(jù)庫(kù)用戶名> dbname=aliyun password=<數(shù)據(jù)庫(kù)密碼>' PUBLICATION pub_customers;
對(duì)遷移后的數(shù)據(jù)進(jìn)行驗(yàn)證
登錄AWS數(shù)據(jù)庫(kù):
psql -h <AWS數(shù)據(jù)庫(kù)終端節(jié)點(diǎn)> -p 5432 -U <數(shù)據(jù)庫(kù)用戶名> -W -d aliyun
執(zhí)行命令查詢表數(shù)據(jù)是否跟阿里云數(shù)據(jù)中保持一致:
SELECT * FROM customers;
SELECT * FROM orders;