暂无图片
pg_rewind的使用的例子
我来答
分享
暂无图片 匿名用户
pg_rewind的使用的例子

原来一主一从的流复制,异步模式下


168 是主,169 是从


原来主从都正常

模拟主库硬件坏了,需要切换,让老的备库169变成了主,这个时候,模拟主库插入部分数据(为了模拟生产有写业务),之后老主库168 硬件修复好了,现在要变成新的备库,pg_rewind 报错,提示时间线不一致,无法成功

请问这个场景有没有具体的实验步骤指导一下,

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
soul0202

在 PostgreSQL 中,当你遇到主库故障后切换到备库,并且希望原来的主库恢复为新的备库时,确实可能会遇到时间线不一致的问题。这种情况下,可以使用 pg_rewind 工具来同步数据,但前提是需要确保一些前提条件得到满足。

下面是一个详细的实验步骤指南,帮助你在上述场景中完成从旧主库恢复为新备库的过程:

实验环境准备
主数据库服务器 IP: 192.168.1.168 (原主)
备数据库服务器 IP: 192.168.1.169 (原备)
步骤 1:模拟主库硬件故障并切换到备库
在原主库上停止服务
Bash
sudo systemctl stop postgresql
在原备库上提升为新的主库
编辑 postgresql.conf 文件:

Bash
hot_standby = off
然后重启服务:

Bash
sudo systemctl restart postgresql
步骤 2:在新主库(原备库)上插入测试数据
登录到新的主库,插入一些测试数据以模拟生产环境中正在进行的写操作。

Sql
psql -U your_user -d your_database
INSERT INTO test_table VALUES ('new data');
步骤 3:修复原主库硬件并启动服务
在原主库上启动服务:

Bash
sudo systemctl start postgresql
步骤 4:配置原主库为新的备库
停止原主库的服务
Bash
sudo systemctl stop postgresql
清空原主库的数据目录
注意:这一步会丢失所有本地数据,请确保你不需要这些数据

Bash
rm -rf /var/lib/postgresql/data/*
使用 pg_rewind 同步数据
首先,在新主库上创建一个基础备份用于 pg_rewind:

Bash
pg_basebackup -h 192.168.1.169 -D /tmp/base_backup -U replication_user --wal-method=stream
然后,在原主库上执行 pg_rewind:

Bash
pg_rewind --target-pgdata=/var/lib/postgresql/data --source-server='host=192.168.1.169 port=5432 user=replication_user password=your_password'
如果遇到时间线不一致的问题,你需要检查 WAL 日志文件的时间线ID。你可以通过以下命令查看每个实例的日志文件夹中的 timelinehistory 文件:

Bash
cat /var/lib/postgresql/data/pg_wal/timeline_history/*
步骤 5:重新配置原主库作为新的备库
编辑 recovery.conf 文件:

Bash
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.169 port=5432 user=replication_user password=your_password'
trigger_file = '/tmp/postgresql.trigger.5432'
最后,启动原主库的服务:

Bash
sudo systemctl start postgresql
注意事项
确保两个节点之间的网络连接稳定可靠。
使用 pg_rewind 进行数据同步前,请确保目标节点有足够的磁盘空间。
在整个过程中,建议定期备份关键数据以防万一出现问题。
按照上述步骤操作后,你应该能够成功地将原主库转换为新的备库,并解决由于时间线不一致导致的问题。

暂无图片 评论
暂无图片 有用 5
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
postgresql copy是不是不能将文件导出成insert?
回答 1
已采纳
是的。这个只是导出表数据。相当于导出表数据为文本形式。
opengauss有什么参数可以提升写入性能的?不管是分片表还是复制表,写入都比pg慢很多
回答 1
具体怎样测试的?单机版还是带备库的?
请问openGauss是否支持pgcrypto扩展?
回答 3
针对sm4的加密/解密函数gsdecrypt/gsencrypt有几个疑问:1)函数gsdecrypt/gsencrypt其对应的是什么模式?CBC?如果是CBC模式,IV是在哪里设置?2)在open
编译安装问题
回答 1
1.确认 uuidossp 模块已安装首先,确保在编译安装PostgreSQL时,uuidossp模块也被编译了。默认情况下,大多数模块应该已经被包含在内,但是有时可能需要手动确认
postgresql analyze分区表耗时较长
回答 3
补充一下楼主的问题描述:数据库是高斯200,使用的列存表,楼主反馈客户对单个分区做analyze,实际上还是全表analyze(虽然高斯语法上说是支持对分区做analyze)。
postgresql 中字符串截取第二位开始 到 倒数第二位的字符, substr可以实现吗?
回答 3
已采纳
postgresSELECTsubstr(substr('postgresql',2),0,length('postgresql')1);substrostgresq(1row)期待大佬看看有没有更简
Pacemaker的PostgreSQL一主多从读
回答 6
大佬,这种cls命令在哪查文档
pg中如何查找未提交的事务或者语句?
回答 2
应该是SELECTFROMpgstatactivityWHEREstateNOTIN(&x27;idle&x27;);在pgstatactivity视图中,active状态表示后端正在执行一个查询。
postgresql的AWR分析
回答 1
https://www.modb.pro/db/1791511253306904576
postgressql 使用触发器同步数据到另外一个表,做数据展示 当触发器报错时 主表数据也会回滚
回答 1
已采纳
触发器分事前和事后,按你的描述,你应该创建的是事前触发器,触发器报错数据回滚,改成事后触发器就好了