pg_rewind增量同步备库

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: /*在数据库变得比较大时, 例如上TB, 如果部署了PostgreSQL primary-standby 流复制或者log shipping HA.


/*
在数据库变得比较大时, 例如上TB, 如果部署了PostgreSQL primary-standby 流复制或者log shipping HA.
当发生了failover, old primary节点可能因为某些原因需要重新同步数据. 
在广域网上, 由于网络异常也可能造成standby节点落后主节点, 导致需要重新同步数据.
小数据库重新同步数据很方便, 全量或者使用rsync增量同步都可以. 
但是数据库很大的情况下, rsync也会变得非常慢, 而且大量消耗主机IO资源. 
PostgreSQL 社区有提议在核心中加入通过wal文件解析, 达到增量同步到目的
*/


--配置9.5版本的主从环境


--在pg的9.5版本中 checkpoint_segments参数已经被移除
--max_wal_size 换算大小 ,http://www.postgresql.org/docs/9.5/static/release-9-5.html
--max_wal_size = (3 * checkpoint_segments) * 16MB
max_wal_size = 1GB






--pg_rewind 前提条件
1. full_page_writes
2. wal_log_hints 设置成 on 或者 PG 在初始化时开启 checksums 功能




--查看从库的配置恢复文件
[postgres@rudy_01 5430]$ grep ^[a-z] recovery.conf 
standby_mode = on
recovery_target_timeline = 'latest'
primary_conninfo = 'host=rudy_01 port=5431 user=repuser'
trigger_file = '/usr/local/postgresql/9.5/5430/postgresql.trigger.5430'




--启动备库为主库
touch /usr/local/postgresql/9.5/5430/postgresql.trigger.5430
--在原来的备机点上插入测试数据
create table test_2(id int4);
insert into test_2(id) select n from generate_series(1,10000) n;




--在主机点上停止原主机点数据库
[postgres@rudy_01 5430]$  pg_controldata | grep cluster
Database cluster state:               in production
[postgres@rudy_01 5430]$ pg_ctl stop -m fast -D $PGDATA
waiting for server to shut down.....
server stopped
--备注:停完原主库后,千万不能立即以备节点形式拉起老库,否则在执行 pg_rewind 时会报,"target server must be shut down cleanly" 错误


-- 如果有如下错误
target server needs to use either data checksums or "wal_log_hints = on"
--备注:数据库在 initdb 时需要开启 checksums 或者设置  "wal_log_hints = on"




--注意要备份好原来主库的配置文件,因为pg_rewind会把配置文件也同步过来覆盖原来的配置文件
cp pg_hba.conf pg_hba.bak
cp postgresql.conf postgresql.bak


--在原主库上执行pg_rewind上操作
--千万注意,如要在原主库关闭之前,又对数据库进行了增删查改,它们会对覆盖
pg_rewind --target-pgdata $PGDATA --source-server='host=rudy_01 port=5430 user=postgres dbname=postgres password=123456' -P 


connected to server
servers diverged at WAL position 0/9DECBC0 on timeline 2
rewinding from last common checkpoint at 0/6000138 on timeline 2
reading source file list
reading target file list
reading WAL in target
need to copy 196 MB (total source directory size is 213 MB)
201117/201117 kB (100%) copied
creating backup label and updating control file
Done!




--在原来的主库上创建复制配置文件
cat recovery.conf 


standby_mode = on
recovery_target_timeline = 'latest'
primary_conninfo = 'host=rudy_01 port=5430 user=repuser'
trigger_file = '/usr/local/postgresql/9.5/5431/postgresql.trigger.5431'


--启动原主库做备库使用
pg_ctl start -D $PGDATA

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
8月前
|
关系型数据库 MySQL 数据处理
FlinkCDC 增量读取 binlog 数据比较慢
FlinkCDC 增量读取 binlog 数据比较慢
317 1
|
弹性计算 网络协议 容灾
PostgreSQL 时间点恢复(PITR)在异步流复制主从模式下,如何避免主备切换后PITR恢复(备库、容灾节点、只读节点)走错时间线(timeline , history , partial , restore_command , recovery.conf)
标签 PostgreSQL , 恢复 , 时间点恢复 , PITR , restore_command , recovery.conf , partial , history , 任意时间点恢复 , timeline , 时间线 背景 政治正确非常重要,对于数据库来说亦如此,一个基于流复制的HA架构的集群,如果还有一堆只读节点,当HA集群发生了主备切换后,这些只读节点能否与新的主节点保持
1653 0
|
4月前
|
关系型数据库 数据库 PostgreSQL
postgresql|【基于pg_basebackup命令的归档备份和恢复---热备冷恢复方式】
postgresql|【基于pg_basebackup命令的归档备份和恢复---热备冷恢复方式】
49 0
|
监控 关系型数据库 数据库
PostgreSQL 恢复模式错误日志增强 - 提供正在恢复的WAL(XLOG)文件位置
标签 PostgreSQL , the database system is starting up , the database system is in recovery mode 背景 当数据库异常停库,再次启动时。
2674 0
|
9月前
|
SQL 关系型数据库 MySQL
Mysql使用binlog增量备份与恢复
Mysql使用binlog增量备份与恢复
194 0
|
Oracle 关系型数据库
dataguard 增量恢复
dataguard 增量恢复
104 0
|
缓存 Oracle 关系型数据库
redolog switch会发生完全检查点还是增量检查点
检查点这个概念在Oracle中非常重要,很多人对检查点这个概念很模糊,为了彻底搞懂,我们一起来讨论以下几个问题! 1、什么是完全检查点?哪些操作会触发?  2、什么是增量检查点?哪些条件会触发? 3、redolog switch会发生完全检查点还是增量检查点?(此话题的核心部分:用实验验证) 4、Oracle中检查点(checkpoint)一共有多少种呢?
redolog switch会发生完全检查点还是增量检查点
|
SQL Oracle 关系型数据库
PostgreSQL pg_rewind,时间线修复,脑裂修复,flashback - 从库开启读写后,回退为只读从库。异步主从发生角色切换后,主库rewind为新主库的从库
PostgreSQL pg_rewind,时间线修复,脑裂修复,flashback - 从库开启读写后,回退为只读从库。异步主从发生角色切换后,主库rewind为新主库的从库
1878 1
|
SQL 存储 C语言
binlog的三种模式
binlog的三种模式 statement模式 特点: (1)此模式不支持RU,RC隔离级别; (2)binglog日志文件中上一个事物的结束点是下一个事物的开始点; (3)DML,DDL语句都会明文显示; (4)对一些系统函数不能准确复制或者不能复制,如load_file(...
2700 0
|
监控 关系型数据库 数据库
pg_resetxlog清理的pg_xlog下的WAL日志
PostgreSQL的pg_xlog下有大量日志,空间不足,如何删除? Darren1:postgres:/usr/local/pgsql/data/pg_xlog:>ls 000000010000000000000008.
1317 0