阿里云 RDS PostgreSQL 版迁移到 AWS RDS for PostgreSQL 步骤

本文章给出了从阿里云数据库 RDS PostgreSQL 版迁移到 AWS RDS for PostgreSQL 的步骤。由于 AWS 的 PostgreSQL 从 10.4 版本才开始支持原生的逻辑复制,本文以 AWS RDS for PostgreSQL 10.4 版本为例。

准备阿里云 PostgreSQL 环境

  1. 进入阿里云 RDS 控制台,点击「创建实例」,类型选择「PostgreSQL 10 」,点击「下一步:实例配置」,「下一步:确认订单」,「去支付」




  2. 在控制台实例列表中,等待运行状态为「运行中」,选择「操作 - 管理」


  3. 在左侧选择「账号管理 - 创建账号」,数据库账号:aws ,账号类型「高权限账号」,密码:Awsaws@123,点击「创建」

  4. 在左侧选择「数据安全性 - 白名单设置 - 添加白名单分组」,分组名称:aws,组内白名单:0.0.0.0/0 ,点击「确定」

  5. 在左侧选择「数据库连接 - 申请外网地址」,点击「确定」


  6. 在左侧选择「参数设置」,修改参数 wal_level 的运行参数值为logical,点击「提交参数」,点击「确认」(注意本步骤操作会重启数据库,生产环境请在维护时间段操作


  7. 安装 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/

  1. 连接数据库:
    psql -h <步骤6里的外网地址> -p 1921 -U <步骤4里的用户名> -W -d postgres

  2. 执行以下命令创建测试数据:

# 创建测试数据库,名称:aliyun
CREATE DATABASE aliyun;
\c aliyun;

# 创建两张测试表格
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)
);

# 插入测试数据
INSERT INTO customers (id, full_name) VALUES (1, 'Andy');
INSERT INTO orders (order_id, dish_name, customer_id) VALUES (1, 'Andy_Dish', 1);

# 确认数据结果
SELECT * FROM customers;
SELECT * FROM orders;

准备 Amazon RDS for PostgreSQL 环境

  1. 登录 Amazon RDS 控制台,选择「参数组」,点击「创建参数组」,参数组系列 选择 「postgres10」,组名: aliyun-aws, 描述:aliyun-aws, 点击「创建」

  2. 点击创建好的参数组,修改参数 rds.logical_replication 值为 1,点击「保存修改」


  3. 选择左侧 「数据库」,点击「创建数据库」


  4. 选择「标准创建」,引擎类型「PostgreSQL」,版本「PostgreSQL 10.4-R1」,数据库实例标识符:ali-aws,主用户名:aws,密码:Awsaws-123,初始数据库名称: aliyun,数据库参数:ali-aws,「公开访问」选择「是」,其它配置参考下图或保持默认,点击「创建数据库」




  1. 修改数据库VPC安全组,允许数据库的 5432 端口访问


  2. 连接数据库:
    psql -h <终端节点> -p 5432 -U <步骤5里的主户名> -W -d <步骤5里的初始数据库名称>

  3. 创建数据表:

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)
);

运行逻辑复制进行数据迁移

  1. 登录阿里云数据库:
    psql -h <阿里云数据库外网地址> -p 1921 -U <数据库用户名> -W -d aliyun

  2. 设置阿里云数据库 PUBLICATION:

CREATE PUBLICATION pub_orders FOR TABLE orders;
CREATE PUBLICATION pub_customers FOR TABLE customers;
  1. 登录AWS数据库:
    psql -h -p 5432 -U <数据库用户名> -W -d aliyun

  2. 设置 AWS 数据库 SUBSCRIPTION:

CREATE SUBSCRIPTION sub_orders CONNECTION 'host=<阿里云数据库外网地址> port=1921 user=<数据库用户名> dbname=aliyun password=<数据库密码>' PUBLICATION pub_orders;
CREATE SUBSCRIPTION sub_customers CONNECTION 'host=<阿里云数据库外网地址> port=1921 user=<数据库用户名> dbname=aliyun password=<数据库密码>' PUBLICATION pub_customers;

对迁移后的数据进行验证

  1. 登录AWS数据库:
    psql -h -p 5432 -U <数据库用户名> -W -d aliyun

  2. 执行命令查询表数据是否跟阿里云数据中保持一致:

SELECT * FROM customers;
SELECT * FROM orders;

你可能感兴趣的:(阿里云 RDS PostgreSQL 版迁移到 AWS RDS for PostgreSQL 步骤)