--- title: "Postgresql 主从" date: 2019-11-04T02:09:29+08:00 lastmod: 2019-11-04T02:09:29+08:00 tags: ["postgresql", "replcation", "同步"] categories: ["database"] --- # 主库配置 - 修改 postgresql.conf ``` listen_address = '*' wal_level = replica wax_wal_senders = 10 wal_keep_segments = 64 hot_standby = on ``` - 启动主库 postgresql-10 服务 ```bash systemctl start postgresql-10 ``` - 创建同步账户 ```sql create user replica superuser password '123456'; -- 这里可以只赋予 replication 权限,后面从库复制初始数据库时使用其他有权限帐号 ``` - 修改 pg_hba.conf ``` host replication replica samenet md5 ``` # 从库配置 - 停止从库 postgresql-10 服务,清空数据库目录 ```bash systemctl stop postgresql-10 rm -rf /var/lib/pgsql/10/data/* ``` - 从主库复制初始数据库 ```bash pg_basebackup \ -h <主库ip> \ -U replica \ -F p \ -X stream \ -P -R \ -D /var/lib/pgsql/10/data/ \ -l backup_20191104 ``` - -h 指定连接的数据库的主机名或IP地址 - -U 指定连接的用户名 - -F 指定了输出的格式,支持p(原样输出)或者t(tar格式输出) - -X 表示备份开始后,启动另一个流复制连接从主库接收WAL日志 - -P 表示允许在备份过程中实时的打印备份的进度 - -R 表示会在备份结束后自动生成recovery.conf文件 - -D 指定备份写入的数据目录,需要与数据库配置的数据库目录一致,初次备份之前从库的数据目录需要手动清空 - -l 表示指定一个备份的标识 # 检查状态 - 检查从库进程 ```bash ps -ef|grep postgres # 可以看到 wal sender 和 receiver process 两个进程 ``` - 从库为只读模式,无法进行 增/删/改 操作 - 主库查看 replication 客户端 ```sql select client_addr,sync_state from pg_stat_replication; ```