📜  postgres 复制命令 - SQL (1)

📅  最后修改于: 2023-12-03 14:45:34.052000             🧑  作者: Mango

Postgres 复制命令 - SQL

Postgres 复制是一种高可用性和容错机制,它允许把一个数据库副本同步到另一个主数据库上。这意味着当主数据库发生故障时,备库可以承担主库的职责,最大化系统的可用性。

在 Postgres 中,复制是通过将事务日志流式传输到备库来实现的。这个过程分为两个步骤:

  1. 主库将事务日志写入 WAL (Write Ahead Log) 文件。
  2. 备库将 WAL 文件流式传输到自己的 WAL 目录,并通过 replay 日志重新创建主库的状态。

以下是一些常用的 Postgres 复制命令:

创建复制角色(在主库上执行)
CREATE ROLE replica LOGIN REPLICATION PASSWORD 'password';

这个命令创建了一个名为 replica 的登录角色,并授予他复制权限。这个角色将用于在备库上进行复制。

启用 WAL 归档(在主库上执行)
ALTER SYSTEM SET archive_mode = on;
ALTER SYSTEM SET archive_command = 'cp %p /var/lib/postgresql/data/archive/%f';

这个命令启用了 WAL 归档,并将归档文件写入到 /var/lib/postgresql/data/archive 目录下。

启用复制(在主库上执行)
ALTER SYSTEM SET wal_level = replica;
ALTER SYSTEM SET max_wal_senders = 10;
ALTER SYSTEM SET wal_keep_size = 512;

SELECT pg_reload_conf();

这个命令将 Postgres 设置为复制模式,并配置了最大 WAL 发送者数量和 WAL 保留大小。pg_reload_conf() 命令用于重新加载配置文件。

配置备库(在备库上执行)
ALTER SYSTEM SET hot_standby = on;

SELECT pg_create_restore_point('before_replication');

SELECT pg_start_backup('label', true, false);

-- Copy data from master to standby server

SELECT pg_stop_backup();

ALTER SYSTEM SET hot_standby = off;

这个命令将备库配置为热备,然后使用 pg_create_restore_point() 创建一个还原点,在备库上启动备份,并从主库复制数据。

启动复制(在备库上执行)
SELECT pg_create_physical_replication_slot('replication_slot');

SELECT pg_basebackup(
    '--pgdata=/var/lib/postgresql/data',
    '--write-recovery-conf',
    '-D',
    '/var/lib/postgresql/data',
    '-S',
    'replication_slot',
    '-X',
    'stream',
    '--progress'
);

touch /var/lib/postgresql/data/standby.signal

这个命令在备库上启动了复制,使用 pg_create_physical_replication_slot() 创建一个物理复制槽, pg_basebackup() 命令复制主库的 WAL,并将其应用到备库,最后在 /var/lib/postgresql/data 目录下创建一个文件 standby.signal,指示备库是一个重演节点。

以上就是 Postgres 复制的常用命令。