📅  最后修改于: 2023-12-03 14:45:34.052000             🧑  作者: Mango
Postgres 复制是一种高可用性和容错机制,它允许把一个数据库副本同步到另一个主数据库上。这意味着当主数据库发生故障时,备库可以承担主库的职责,最大化系统的可用性。
在 Postgres 中,复制是通过将事务日志流式传输到备库来实现的。这个过程分为两个步骤:
以下是一些常用的 Postgres 复制命令:
CREATE ROLE replica LOGIN REPLICATION PASSWORD 'password';
这个命令创建了一个名为 replica
的登录角色,并授予他复制权限。这个角色将用于在备库上进行复制。
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 复制的常用命令。