开发者社区 问答 正文

Postgres 主从切换 record with incorrect prev-link

数据库主从切换 PG9.6

环境
A 主 B 从

Step 1
B升级为主  pg_ctl promote -D .
B现在可读可写,timeline +1

Step 2
A变为从 pg_rewind 对齐timeline
修改recovery.done -> recover.conf 及内容
结果
主从切换成功

悲催 在Step2 中没有关闭A

< 2017-09-30 10:18:22.018 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0
< 2017-09-30 10:18:27.024 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0
< 2017-09-30 10:18:32.029 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0
< 2017-09-30 10:18:37.034 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0
< 2017-09-30 10:18:42.040 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0
< 2017-09-30 10:18:47.045 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0
< 2017-09-30 10:18:52.050 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0
< 2017-09-30 10:18:57.056 CST > LOG: record with incorrect prev-link EB000000/87 at 0/BE04AFE0

启动失败,该怎么解决。

展开
收起
eamon13 2017-09-30 10:46:12 7668 分享 版权
阿里云 AI 助理回答

遇到这种情况,您需要按照以下步骤尝试解决问题:

  1. 停止原主库(A)的PostgreSQL服务: 首先确保原主库(A)的PostgreSQL服务已经完全停止。如果之前没有正确关闭,可以使用以下命令尝试强制停止服务(请根据您的操作系统调整命令):

    # 对于Linux系统
    sudo systemctl stop postgresql-9.6
    # 或者如果是直接通过pg_ctl启动的
    pg_ctl stop -D /your/data/directory -m immediate
    

    这里的-m immediate参数表示立即关闭,不等待当前事务完成。

  2. 检查数据目录完整性: 在进行任何进一步操作之前,建议对数据目录进行一次完整性检查,以确认是否有损坏。可以使用pg_verify_checksums工具来检查:

    pg_verify_checksums -D /your/data/directory
    

    如果发现有校验和错误,可能需要考虑从备份恢复或联系专业支持。

  3. 清理wal日志: 由于您在未关闭原主库的情况下尝试了pg_rewind,可能会导致WAL日志混乱。在确保服务已停的情况下,可以手动清理pg_wal目录中的旧WAL文件(请谨慎操作,确保有备份):

    cd /your/data/directory/pg_wal
    mv * /some/safe/place/for备份/
    
  4. 重新执行pg_rewind或使用备份恢复

    • 重新执行pg_rewind:在确保原主库(A)的数据目录干净且服务已停止后,可以尝试重新执行pg_rewind来对齐到新的主库(B)。请确保按照官方文档的正确步骤操作。
    • 使用备份恢复:如果上述步骤无法解决问题,或者数据损坏严重,最安全的做法是从最近的备份恢复原主库(A),然后重新配置为从库。
  5. 配置恢复文件并重启服务: 在完成上述步骤后,确保recovery.conf(或在PG 10及以上版本是recovery.conf被合并到了postgresql.conf中)配置正确,指向新的主库(B)的地址,并包含必要的恢复设置。之后,尝试重新启动服务:

    pg_ctl start -D /your/data/directory
    

请记得,在处理此类问题时,始终确保有最新的数据库备份,以防操作过程中发生不可逆的数据丢失。如果问题复杂,建议寻求专业的数据库管理员或阿里云的技术支持帮助。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: