开发者社区 > PolarDB开源 > PolarDB 分布式版 > 正文

请问 如果PG里有A,B两个数据库,我想做一个A的实时备库,不包含B库,如何实现?有大佬能指点下嘛?

请问 如果PG里有A,B两个数据库,我想做一个A的实时备库,不包含B库,如何实现?有大佬能指点下嘛?

展开
收起
云原生那些事 2023-07-03 18:45:57 136 0
11 条回答
写回答
取消 提交回答
  • 要实现A数据库的实时备库,不包含B库,可以使用流复制(streaming replication)来实现。以下是一种可能的实现方法:

    1. 在A数据库的主服务器上进行配置:

      • 确保A数据库已经启用了归档日志(archive logging)。
      • 在postgresql.conf文件中,启用流复制并设置合适的参数。例如,将wal_level设置为logical,将max_wal_senders设置为一个适当的值(例如,10),将wal_keep_segments设置为一个足够大的值以保留足够的归档日志。
      • 创建一个用于复制的用户,并为其分配适当的权限。
    2. 在备库服务器上进行配置:

      • 安装与A数据库版本相同的PostgreSQL软件。
      • 在postgresql.conf文件中,启用流复制并设置合适的参数。例如,将wal_level设置为logical,将max_wal_senders设置为一个适当的值(例如,10),将wal_keep_segments设置为一个足够大的值以保留足够的归档日志。
      • 创建一个用于复制的用户,并为其分配适当的权限。
      • 创建一个recovery.conf文件,并在其中指定主服务器的连接信息和复制的时间点。
    3. 启动备库服务器:

      • 启动备库服务器,它将连接到主服务器并开始复制数据。
      • 数据库将在初始同步期间复制主服务器上的所有数据,并且以后的更改将实时地复制到备库。

    需要注意的是,这种方法只会复制A数据库的数据,不会包含B库的数据。如果需要在备库服务器上创建B库的副本,可以在备库服务器上单独进行配置和复制。

    2023-07-21 22:03:24
    赞同 展开评论 打赏
  • 在备份服务器上安装 PostgreSQL:首先,您需要在备份服务器上安装和配置 PostgreSQL 数据库。确保您选择的版本与主数据库 A 的版本相匹配。

    配置主数据库 A:在主数据库 A 上启用 WAL (Write-Ahead Logging) 日志,并配置数据库参数,使其生成 WAL 日志。

    创建基础备份:使用 pg_basebackup 工具创建主数据库 A 的基础备份。这将创建一个初始备份,用于在备份服务器上建立起一个与主数据库 A 相同的数据库实例。

    2023-07-08 14:51:29
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    如果您想要做一个A库的实时备库,不包含B库,可以使用以下步骤:

    首先,您需要在A库中创建一个备份表,用于存储备份数据。 然后,您需要在A库中创建一个触发器,用于定时备份数据。 在触发器中,您需要使用INSERT INTO语句将备份数据插入到备份表中。 最后,您需要在B库中创建一个触发器,用于定时备份A库的数据。在触发器中,您需要使用INSERT INTO语句将A库的数据插入到备份表中。

    2023-07-07 14:43:14
    赞同 展开评论 打赏
  • CSDN博客专家,51CTO博主专家,多知名企业认证讲师&签约作者&培训讲师,特邀作者等,华为云专家,资深测试开发专家,金牌面试官,职场面试培训及规划师。

    【回答】

    可以根据以下步骤进行操作, 如下:

    1. 创建一个新的PolarDB实例,作为A库的备库。
    2. 在A库的主库中,使用pg_hba.conf文件或者阿里云控制台的访问控制功能,限制只有A库的主库可以访问该实例。
    3. 在A库的主库中,使用pg_dump或者pg_basebackup等工具,将A库的数据备份到备库。
    4. 在备库中,使用recovery.conf文件配置为A库的备库,并启动备库。
    5. 确保备库与主库之间的网络连接正常,以便实现实时同步。
    2023-07-05 15:02:35
    赞同 展开评论 打赏
  • 热爱开发

    如果你想在 PostgreSQL 中实现 A 数据库的实时备库,并且不包含 B 数据库,可以使用以下几个方面的解决方案:

    创建一个新的数据库。你可以使用以下命令来创建一个新的数据库: Copy code CREATE DATABASE A_backup; 将 A 数据库的数据复制到新的数据库中。你可以使用以下命令来将 A 数据库的数据复制到新的数据库中: Copy code INSERT INTO A_backup SELECT * FROM A; 停止并删除 A 数据库。你可以使用以下命令来停止并删除 A 数据库: Copy code DROP TABLE A; DROP TABLE A_backup; 如果你想在 PostgreSQL 中实现 A 数据库的实时备库,并且不包含 B 数据库,你可以使用以上几个方面的解决方案。

    2023-07-04 09:13:28
    赞同 展开评论 打赏
  • 如果你希望在PostgreSQL中创建一个实时备库来复制数据库A,但不包含数据库B,可以按照以下步骤进行操作:

    1. 确保你已经在主数据库(数据库A)上启用了WAL归档。这将确保所有的事务日志都被写入到WAL归档目录中。

    2. 在备库服务器上安装并配置PostgreSQL。确保备库服务器和主数据库可以通过网络互相访问。

    3. 在备库服务器上创建一个空的目标数据库(例如,命名为A_replica)作为备库的目标。

    4. 在备库服务器的postgresql.conf文件中设置以下参数:

      • 修改primary_conninfo参数,指定主数据库的连接信息,例如:primary_conninfo = 'host=<主数据库IP地址> port=<主数据库端口> user=<用户名> password=<密码>'
      • 设置restore_command参数为恢复WAL归档日志的命令,例如:restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p',其中/var/lib/postgresql/wal_archive/是你的WAL归档目录。
    5. 在备库服务器的recovery.conf文件中设置以下参数:

      • 设置standby_mode为on,表示启用备库模式。
      • 设置primary_slot_name为一个唯一的槽名称,用于复制数据。
    6. 启动备库服务器,它将自动连接到主数据库并开始复制数据。

    2023-07-04 08:38:23
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    PostgreSQL 中创建一个实时备库,并且不包含 B 数据库,

    1. 创建一个新的 PostgreSQL 数据库:在要创建实时备库的目标服务器上,使用 createdb 命令创建一个新的 PostgreSQL 数据库。
    createdb -h target_server -p 5432 -U postgres -E UTF8 -T template0 mydb
    

    其中,target_server 是目标服务器的主机名或 IP 地址,mydb 是要创建的新数据库的名称。 2. 配置实时备库:在要作为实时备库的服务器上,使用 pg_basebackup 命令创建一个备份,然后将备份文件复制到目标服务器上。在目标服务器上,使用 pg_restore 命令将备份文件还原到新创建的数据库中。 参考

    
    # 在实时备库上执行以下命令
    pg_basebackup -h source_server -D /path/to/backup -U replicator -W
    
    # 将备份文件复制到目标服务器上
    scp /path/to/backup/* target_server:/path/to/backup/
    
    # 在目标服务器上执行以下命令
    pg_restore -h localhost -p 5432 -U postgres -d mydb /path/to/backup/backup_file```  
    3. 配置实时备库的 recovery.conf 文件:在目标服务器上,将 recovery.conf 文件添加到新创建的数据库目录中。在 recovery.conf 文件中,指定要作为主服务器的源服务器的连接信息和要复制的数据库。
    
    ```ini
    
    standby_mode = 'on'
    primary_conninfo = 'host=source_server port=5432 user=replicator password=replicatorpass'
    trigger_file = '/tmp/trigger_file'
    
    # 不复制 B 数据库
    primary_slot_name = 'my_slot'
    primary_slot_type = 'physical'
    restore_command = 'pg_waldump --slot {0} -f "%p" --start "%f" --end "%F" && cp %p "%r"'.format(primary_slot_name)
    recovery_target_timeline = 'latest'
    recovery_min_apply_delay = 0min
    recovery_target_inclusive = false
    recovery_target = 'immediate'```  
    
    4. 启动实时备库:在目标服务器上,启动新创建的数据库。数据库将自动连接到源服务器,开始从主服务器复制数据。
    
    ```pgsql
    
    pg_ctl -D /path/to/mydb start```  
    
    
    
    需要结合自己实际需求修改。
    
    2023-07-04 07:54:37
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,你可以通过使用流复制(streaming replication)来实现A数据库的实时备库,而不包含B数据库。流复制是一种基于日志传输的数据复制方法,可以将主数据库的更改同步到一个或多个备库。

    首先,你需要在A主数据库上进行以下配置:

    1. 确保主数据库的postgresql.conf文件中设置了wal_level为至少hot_standby(默认值为minimal)。

    2. 同样在postgresql.conf文件中,设置max_wal_senders参数以指定允许的最大WAL发送者数。

    3. 确保在pg_hba.conf文件中对备库的IP地址或主机名进行适当的认证规则配置,以允许连接备库。

    接下来,在备库服务器上进行以下操作:

    1. 在备库上安装PostgreSQL,并确保版本与主库相同。

    2. 修改备库的postgresql.conf文件,设置以下参数:

      • hot_standby = on:启用热备份模式。
      • primary_conninfo:设置主库的连接信息,包括主库的IP地址、端口号和数据库名称。
      • restore_command:设置用于从主库获取归档日志的命令。
    3. 将主库的数据目录复制到备库服务器上相应的位置,并确保备库的数据目录权限正确设置。

    4. 启动备库数据库,并观察日志输出以确保备库成功连接到主库并开始进行流复制。

    完成上述步骤后,你将获得一个只包含A数据库的实时备库。备库将自动接收并应用主库的更改,保持与主库的同步。

    2023-07-04 07:54:38
    赞同 1 展开评论 打赏
  • 要在PG中实现A数据库的实时备库,而不包含B数据库,您可以按照以下步骤进行操作:

    1. 确保目标服务器上安装了PostgreSQL。如果没有,请根据您的操作系统和版本安装最新的PostgreSQL。
    2. 在目标服务器上创建一个新的空白数据库(例如:backup_db)来存储A数据库的备份数据。
    3. 配置主服务器(即A数据库)以允许复制。在主服务器的postgresql.conf文件中进行以下设置:

      • wal_level参数设置为logicalreplica,以启用逻辑或物理复制。
      • 确保max_wal_senders参数设置为大于0的值,以启用WAL发送器。
      • 确保archive_mode参数设置为on,以启用归档模式。
      • archive_command参数设置为将WAL日志文件归档到目标服务器上的相应位置,例如:scp %p username@target_server:/path/to/archive/%f(需要在目标服务器上设置SSH密钥认证)。
    4. 修改主服务器上的pg_hba.conf文件,以确保目标服务器可以连接到主服务器并复制数据。添加以下条目:

      host    replication    target_server_ip/32    trust
      

      其中,target_server_ip是目标服务器的IP地址。如果两台服务器在同一网络中,则可以使用host replication all trust

    5. 重启主服务器以使配置更改生效。

    6. 在目标服务器上创建一个新的复制槽。在目标服务器上使用以下命令:

      pg_recvlogical -d A_database -s slot_name --create-slot -P wal2json
      

      其中,A_database是主服务器上要复制的数据库名称,slot_name是复制槽的名称,wal2json是逻辑解码插件的名称(确保已安装该插件)。

    7. 启动目标服务器上的逻辑复制流。在目标服务器上使用以下命令:

      pg_recvlogical -d A_database -s slot_name --start -o "proto_output=keepalives"
      

      这将开始从主服务器复制数据到目标服务器上的备份库。

    请注意,以上步骤假设您已经具有足够的权限来进行所需的配置更改和访问。确保在执行任何重要操作之前备份数据库,并在测试环境中进行验证。

    2023-07-03 21:28:00
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    要实现A数据库的实时备库,而不包含B数据库,您可以使用PostgreSQL的流复制(streaming replication)功能来完成。以下是一种可能的实现方法:

    配置主数据库(A):

    在A数据库的postgresql.conf文件中启用流复制功能,设置wal_level为logical或replica。 在pg_hba.conf文件中配置允许备库连接到主数据库的访问规则。 重启A数据库以使配置生效。 创建备库(实时备库):

    在备库服务器上安装并配置PostgreSQL。 在备库的postgresql.conf文件中设置wal_level为logical或replica。 在recovery.conf文件中指定主数据库的连接信息,包括主数据库的IP地址、端口、用户名和密码。 启动备库以开始复制数据。 这样,备库将会实时地从主数据库复制数据,并保持与主数据库的同步。由于您只需要备份A数据库而不包含B数据库,因此在配置备库时,确保只复制A数据库的相关信息。

    请注意,上述方法是一种基本的实现方式,具体的配置和步骤可能因您的环境和需求而有所不同。建议您参考PostgreSQL的官方文档或咨询专业的数据库管理员以获取更详细和准确的指导。

    2023-07-03 21:22:39
    赞同 展开评论 打赏
  • 应该是以节点为单位的,不能对不同库单独设置

    此答案来自钉钉群“PG|POLARDB技术进阶"

    2023-07-03 19:57:27
    赞同 展开评论 打赏
滑动查看更多

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载