前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TBase-手工创建数据多活

TBase-手工创建数据多活

原创
作者头像
腾讯云数据库 TencentDB
发布2020-12-07 10:01:30
6990
发布2020-12-07 10:01:30
举报

今天这篇文章主要是实操,给大家演示如何利用SQL语句手工创建数据多活。

实验描述:

利用数据多活同步mc.public.test_repl到postgres.public.test_repl的数据。

实验步骤:

1 首先我们连接到CN节点,创建实验用的数据库mc和实验用的表test_repl,并向test_repl插入10000条数据。

[tbase@VM-64-14-centos ~]$ psql -h 172.21.64.4 -U tbase -d postgres -p 11345

psql (10.6, server 10.0 TBase V2)

Type "help" for help.

postgres=# create database mc;

CREATE DATABASE

postgres=# \c mc

psql (10.6, server 10.0 TBase V2)

You are now connected to database "mc" as user "tbase".

mc=# create table test_repl(id int primary key,name varchar(20));

CREATE TABLE

mc=# insert into test_repl select generate_series(1,10000),'test';

INSERT 0 10000

2 连接到cn节点的postgres数据库,创建与test_repl表(与mc.test_repl表结构相同)

[tbase@VM-64-14-centos ~]$ psql -h 172.21.64.4 -U tbase -d postgres -p 11345

创建test_repl表。

create table test_repl(id int primary key,name varchar(20));

3 在postgres数据库中创建订阅。

注意: 有几个DN节点,就要创建几个subscription。因为数据是从DN上通过逻辑复制过来的。

CREATE TBASE SUBSCRIPTION sub_test_4

CONNECTION 'host = 172.21.64.4 port = 11000 user = tbase dbname = mc'

PUBLICATION p_mc_public_test_repl WITH

(connect=true, enabled=true, create_slot=true, copy_data=true, synchronous_commit=on,

ignore_pk_conflict = true, parallel_number= 4 );

CREATE TBASE SUBSCRIPTION sub_test_5

CONNECTION 'host = 172.21.64.5 port = 11000 user = tbase dbname = mc'

PUBLICATION p_mc_public_test_repl WITH

(connect=true, enabled=true, create_slot=true, copy_data=true, synchronous_commit=on,

ignore_pk_conflict = true, parallel_number= 4 );

1. 检验

查看postgres.public.test_repl表,1w条数据已经成功复制过来。

在mc.public.test_repl端做dm操作,验证是否同步到postgres.public.test_repl

--查询postgres.public.test_repl

数据均已经同步到postgres.public.test_repl。

问题整理:

1 新建发布,发布表,报错如下:

select c.relname from pg_class c where c.oid =

( select indexrelid from pg_index where indrelid = ( select x.oid from pg_class x, pg_namespace n where n.nspname = 'public' and x.relname = 't1' and c.relnamespace = n.oid) and (indisunique = true or indisprimary = true ))

原因:

--数据多活使用的是逻辑复制原理,要求发布的表上必须有主键或者唯一索引,或者定义复制键,为了性能考虑,最好发布表上带有主键。

2 postgres.public.test_repl数据不完整,只同步一部分数据过来。

检查是否为所有DN节点都创建了subscription。比如有2个节点,那么在第三步的时候,就应该创建2个subscription。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档