PostgreSQL支持物理复制(流复制)及逻辑复制2种。通过流复制技术,可以从实例级复制出一个与主库一模一样的实例级的从库。流复制同步方式有同步、异步两种。
成都创新互联公司是一家专业提供漳州企业网站建设,专注与成都网站设计、做网站、H5高端网站建设、小程序制作等业务。10年已为漳州众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
另一种复制方式为逻辑复制,区别于物理复制的是物理复制是基于实例级的复制,只能复制整个PostgreSQL实例,而不能基于部分库及表。从PostgreSQL10开始,出现了基于表级别的复制,即逻辑复制。
主库安装及从库编译此处就省略了,直接进入主从复制的安装环节。
/* 除了基础参数,搭建备库至少需要配置如下参数 */
listen_address = '*'
wal_level = replica
archive_mode = on
archive_command = 'cp %p /data/postgresql/archive/%f '
max_wal_senders= 10
wal_keep_segments=1024
hot_standby = on
参数简要说明:
注意:上述参数中有涉及归档日志的路径,需手动创建
mkdir -p /data/postgresql/archive/
为了数据安全及便于权限控制,创建一个复制专用的数据库账号。
postgres=# create user repl REPLICATION LOGIN ENCRYPTED PASSWORD 'repl123';
CREATE ROLE
添加复制账号的权限,因可能会主从切换,因此 主从机器的IP均添加。也可以设置网段,以便于后期添加从库。
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host replication repl 192.168.56.33/24 md5
host replication repl 192.168.56.32/24 md5
从机上在线备份主库数据,并将数据放在指定路径,此路径建议与主库路径一致。可以使用pg_basebackup。
命令在线热备份,具体命令如下:
pg_basebackup -h 192.168.56.32 -U repl -p 5432 -F p -X s -v -P -R -D /data/postgresql/data/ -l postgres32
pg_basebackup命令中的参数说明:
以上备份命令输出过程如下:
[postgres@PG33 data]$ pg_basebackup -h 192.168.56.32 -U repl -p 5432 -F p -X s -v -P -R -D /data/postgresql/data/ -l postgres32
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_17737"
56041/56041 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/20000F8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed
从以上日志信息看出pg_basebackup命令首先对数据库做一次checkpoint,之后基于时间点做一个全库基准备份,全备过程中会拷贝$PGDATA数据文件和表空间文件到备库节点对应目录。
以上备份命令中生成了recovery.conf 文件,因此简单修改即可。
standby_mode = 'on'
primary_conninfo = 'user=repl password=repl123 host=192.168.56.32 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any'
## 添加如下信息
recovery_target_timeline = 'latest'
参数说明:
直接使用pg_ctl或配置服务启动从库即可。
pg_ctl -D /data/postgresql/data/ -l pg33.log start
如果启动过程中出现如下错误。
waiting for server to start....2019-09-26 10:40:54.327 CST [10267] FATAL: data directory "/data/postgresql/data" has invalid permissions
2019-09-26 10:40:54.327 CST [10267] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
stopped waiting
pg_ctl: could not start serve
Examine the log output.
则需要先修改权限,再启动即可。
[postgres@PG33 data]$ chmod 0750 /data/postgresql/data/
[postgres@PG33 data]$ pg_ctl -D /data/postgresql/data/ -l pg33.log start
waiting for server to start.... done
server started
在主库创建表并新增数据。
[postgres@PG32 ~]$ psql
psql (11.4)
Type "help" for help.
postgres=# create table test2(id int primary key, name varchar(20));
CREATE TABLE
postgres=# insert into test2 values(1,'aaa'),(2,'abc');
INSERT 0 2
在从库查看。
[postgres@PG33 data]$ psql
psql (11.4)
Type "help" for help.
postgres=# select * from test2;
id | name
----+------
1 | aaa
2 | abc
数据已正常同步。
通过pg_stat_replication视图可以查看复制状态
postgres=# select pid ,usesysid,usename,client_addr,state,sync_state from pg_stat_replication;
pid | usesysid | usename | client_addr | state | sync_state
-------+----------+---------+----------------+-----------+------------
25123 | 16797 | repl | 192.168.56.33 | streaming | async
(1 row)
以上查询结果sync_state字段值为async,表示主备数据复制使用异步方式;state值为streaming,表示流复制方式。
前面的步骤部署的为异步复制,如想配置为同步复制,则调整recovery.conf配置文件里的 synchronous_commit及synchronous_standby_names 后重启或reload即可。
synchronous_commit = remote_write
synchronous_standby_names = 'PG33'
之后再查看结果如下:
postgres=# select pid ,usesysid,usename,client_addr,state,sync_state from pg_stat_replication;
pid | usesysid | usename | client_addr | state | sync_state
-------+----------+---------+----------------+-----------+------------
16265 | 16797 | repl | 192.168.56.33 | streaming | sync
(1 row)
此时状态已变为同步复制了。
注:synchronous_commit 有多种方式,在流复制模式下,主要设置情况如下:
本文名称:PostgreSQL主从复制--物理复制
网站URL:http://www.shufengxianlan.com/qtweb/news44/43494.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联