AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 96626
Accepted
Happydevdays
Happydevdays
Asked: 2015-03-31 11:58:25 +0800 CST2015-03-31 11:58:25 +0800 CST 2015-03-31 11:58:25 +0800 CST

postgresql bdr 0.8.x - 添加另一个下游服务器仅部分起作用

  • 772

我有以下 postgresql 9.4 bdr 设置:

  • 带有名为“bdrdemo”的数据库的上游服务器在 10.1.1.1 上运行
  • 下游服务器 (1),数据库名为 bdrdemo,在 10.2.2.2 上运行(用 10.1.1.1 复制)
  • 下游服务器 (2),数据库名为“newname”,在 10.3.3.3 上运行(与 10.1.1.1 一起复制)

当我设置下游服务器 2 时,我故意使用不同的数据库名称来测试数据库名称是否重要。看起来在 10.1.1.1 上运行的 bdrdemo 的所有数据都被正确复制了,但是当我从上游或下游 2 进行新更改时,两者之间没有任何复制。

我在上游服务器的日志中看到一条错误消息:

3 月 30 日 19:44:38 testbox postgres[2745]: [339-1] d= p=2745 a=FATAL: 3D000: 数据库“newname”不存在

到目前为止我检查过的内容:

  1. 我检查了 bdr.bdr_nodes 表,它现在显示 3 个条目,而不是我创建新的下游服务器之前的两个条目。

    select * from bdr.bdr_nodes

    node_sysid      | node_timeline | node_dboid | node_status 
    ---------------------+---------------+------------+-------------
    6127254639323810674 |             1 |      16385 | r
    6127254604756301413 |             1 |      16384 | r
    6132048976759969713 |             1 |      16385 | r
    (3 rows)
    
    bdrdemo=#
    
  2. 上游服务器上的 postgresql.conf 文件具有以下设置:

    #-------------------------------------------                                                                                          
    # BDR connection configuration for upstream                                         
    #-------------------------------------------                                                                   
    
    bdr.connections = 'bdrdownstream,bdrdownstream2'                                
    bdr.bdrdownstream_dsn = 'dbname=bdrdemo host=10.2.2.2 user=postgres port=5432'                              
    bdr.bdrdownstream2_dsn='dbname=newname host=10.3.3.3 user=postgres port=5432'     
    

编辑 1

下游服务器 1 的配置(此服务器/节点正在工作)

# BDR connection configuration for upstream node.                                
#-------------------------------------------                                       

bdr.connections = 'bdrupstream'                                                  

bdr.bdrupstream_dsn = 'dbname=bdrdemo host=10.1.1.1 user=postgres port=5432'  
bdr.bdrupstream_init_replica = on                                           
bdr.bdrupstream_replica_local_dsn = 'dbname=bdrdemo user=postgres port=5432'   

下游服务器 2 的配置(此服务器/节点不工作)

# BDR connection configuration for upstream node.                                
#-------------------------------------------------                              
bdr.connections = 'bdrupstream'                                                
bdr.bdrupstream_dsn = 'dbname=bdrdemo host=10.1.1.1 user=postgres port=5432'
bdr.bdrupstream_init_replica = on                                              
bdr.bdrupstream_replica_local_dsn = 'dbname=newname user=postgres port=5432'

编辑 2

将本地数据库名称添加到下游 2 的配置后,我重新启动了下游 2 上的数据库。复制无法正常工作。所以我重新启动了上游服务器。还是不行。然后我检查了下游 2 上的日志,我看到了这个:

d=newname p=16791 a=pg_restore NOTICE:  42710: extension "btree_gist" already exists, skipping
d=newname p=16791 a=pg_restore LOCATION:  CreateExtension, extension.c:1208
d=newname p=16791 a=pg_restore NOTICE:  42710: extension "bdr" already exists, skipping
d=newname p=16791 a=pg_restore LOCATION:  CreateExtension, extension.c:1208
d=newname p=16791 a=pg_restore NOTICE:  42710: extension "plpgsql" already exists, skipping
d=newname p=16791 a=pg_restore LOCATION:  CreateExtension, extension.c:1208
d=newname p=16791 a=pg_restore ERROR:  42P07: relation "newtable" already exists
d=newname p=16791 a=pg_restore LOCATION:  heap_create_with_catalog, heap.c:1056
d=newname p=16791 a=pg_restore STATEMENT:  CREATE TABLE newtable (
        id integer NOT NULL,
        fname character varying(60),
        lname character varying(60)
    );



pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 191; 1259 17130 TABLE newtable postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  relation "newtable" already exists
    Command was: CREATE TABLE newtable (
    id integer NOT NULL,
    fname character varying(60),
    lname character varying(60)
);



pg_restore to dbname=newname user=postgres port=5432 fallback_application_name='bdr (6132048976759969713,1,16384,): bdrupstream: init_replica restore' options='-c bdr.do_not_replicate=on -c bdr.permit_unsafe_ddl_commands=on -c bdr.skip_ddl_replication=on -c bdr.skip_ddl_locking=on' failed, aborting
d= p=16780 a=FATAL:  XX000: bdr: /usr/bin/bdr_initial_load exited with exit code 2

当我最初设置 downstream2 时,它确实从上游复制了所有数据,但它只是没有参与新数据/新更改的复制。所以我想我可以理解为什么它在尝试创建已经存在的对象时失败了。但是我是否必须删除订阅者数据库中的数据并重新启动才能使复制工作?

postgresql replication
  • 1 1 个回答
  • 481 Views

1 个回答

  • Voted
  1. Best Answer
    Craig Ringer
    2015-04-01T19:15:52+08:002015-04-01T19:15:52+08:00

    此信息适用于 BDR 0.8 及更早版本;在 BDR 0.9 中,配置方法发生了变化。


    如果本地数据库名称与_dsn节点与其上游连接的参数中指定的数据库名称不同,则必须使用_local_dbname连接选项指定它。

    请参阅我刚刚为此参数添加的 wiki条目,该条目以前不在文档中。

    在您的情况下,在下游 2 上添加:

    bdr.bdrupstream_local_dbname = 'newname'
    
    • 1

相关问题

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve