这是最常用的数据同步方式,适用于一次性或少量数据迁移场景。
/tmp/backup.sql),点击OK完成导出。scp、sftp等工具将导出的备份文件传输到目标服务器。例如:scp /tmp/backup.sql user@target_server_ip:/tmp/
若需要定期自动同步数据(如每日增量同步),可通过pg_cron插件实现。
sudo yum install -y pg_cron_12
postgresql.conf,添加:shared_preload_libraries = 'pg_cron'
cron.database_name = 'postgres' # 指定存储pg_cron作业的数据库
重启PostgreSQL使配置生效:sudo systemctl restart postgresql-12
登录PostgreSQL,创建pg_cron扩展:CREATE EXTENSION pg_cron;
public.users表:SELECT cron.schedule('0 2 * * *', $$
INSERT INTO target_db.public.users
SELECT * FROM source_db.public.users
ON CONFLICT (id) DO UPDATE SET -- 冲突时更新(增量同步)
name = EXCLUDED.name,
email = EXCLUDED.email;
$$);
注:需提前配置源数据库和目标数据库的链接(如通过dblink扩展)。pgAgent是PostgreSQL的任务调度工具,适合复杂的同步流程(如多步骤SQL、脚本调用)。
pgagent包)。INSERT INTO target_table SELECT * FROM source_table WHERE created_at > NOW() - INTERVAL '1 day';)。若需要实时或增量同步数据(如主从服务器、特定表同步),可使用PostgreSQL原生复制功能。
postgresql.conf:wal_level = replica
max_wal_senders = 2
wal_keep_size = 64
pg_hba.conf中添加从库IP访问权限:host replication replicator 从库IP/32 md5
CREATE ROLE replicator WITH LOGIN REPLICATION PASSWORD 'your_password';
SELECT pg_current_wal_lsn();
postgresql.conf:hot_standby = on
recovery.conf(PostgreSQL 12+为postgresql.auto.conf)中添加:standby_mode = 'on'
primary_conninfo = 'host=源服务器IP port=5432 user=replicator password=your_password'
restore_command = 'cp /path/to/wal/%f %p'
wal2json扩展:CREATE EXTENSION wal2json;
CREATE PUBLICATION my_pub FOR TABLE users, orders; -- 指定需要同步的表
CREATE SUBSCRIPTION my_sub
CONNECTION 'host=源服务器IP port=5432 dbname=source_db user=replicator password=your_password'
PUBLICATION my_pub;
若需要更灵活的同步(如跨数据库类型、大数据量),可使用第三方工具:
rsync -avz /var/lib/pgsql/12/data/ user@target_server_ip:/var/lib/pgsql/12/data/
注:同步前需确保源服务器已停止PostgreSQL服务,避免数据不一致。