在Debian系统上实现PostgreSQL数据库的复制,通常指的是设置一个主从复制(Master-Slave replication)环境。在这种配置中,一个PostgreSQL实例(主节点)处理写操作,而一个或多个其他实例(从节点)复制主节点的数据并处理读操作。以下是实现PostgreSQL复制的基本步骤:
编辑主节点的postgresql.conf
文件:
sudo nano /etc/postgresql/<version>/main/postgresql.conf
添加或修改以下配置:
wal_level = replica
max_wal_senders = 10
wal_keep_segments = 64
hot_standby = on
编辑pg_hba.conf
文件以允许从节点连接:
sudo nano /etc/postgresql/<version>/main/pg_hba.conf
添加以下行:
host replication replica_user <从节点IP>/32 md5
创建复制用户:
CREATE USER replica_user WITH REPLICATION PASSWORD 'your_password';
重启PostgreSQL服务:
sudo systemctl restart postgresql
停止从节点的PostgreSQL服务:
sudo systemctl stop postgresql
复制主节点的数据目录到从节点(假设数据目录在/var/lib/postgresql/<version>/main
):
sudo rsync -a /var/lib/postgresql/<version>/main/ /var/lib/postgresql/<version>/main/
编辑从节点的postgresql.conf
文件:
sudo nano /etc/postgresql/<version>/main/postgresql.conf
添加或修改以下配置:
hot_standby = on
编辑recovery.conf
文件(如果不存在则创建):
sudo nano /var/lib/postgresql/<version>/main/recovery.conf
添加以下内容:
standby_mode = 'on'
primary_conninfo = 'host=<主节点IP> dbname=postgres user=replica_user password=your_password'
restore_command = 'cp /var/lib/postgresql/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
确保从节点的数据目录权限正确:
sudo chown -R postgres:postgres /var/lib/postgresql/<version>/main
启动从节点的PostgreSQL服务:
sudo systemctl start postgresql
在主节点上创建一个测试数据库和表,并插入一些数据:
CREATE DATABASE test_db;
\c test_db
CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(100));
INSERT INTO test_table (name) VALUES ('Test Data');
在从节点上检查是否同步:
\c test_db
SELECT * FROM test_table;
如果从节点上显示了相同的数据,说明复制配置成功。
max_wal_senders
和wal_keep_segments
。通过以上步骤,你可以在Debian系统上实现PostgreSQL的主从复制。