数据库主从切换 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
启动失败,该怎么解决。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到这种情况,您需要按照以下步骤尝试解决问题:
停止原主库(A)的PostgreSQL服务: 首先确保原主库(A)的PostgreSQL服务已经完全停止。如果之前没有正确关闭,可以使用以下命令尝试强制停止服务(请根据您的操作系统调整命令):
# 对于Linux系统
sudo systemctl stop postgresql-9.6
# 或者如果是直接通过pg_ctl启动的
pg_ctl stop -D /your/data/directory -m immediate
这里的-m immediate参数表示立即关闭,不等待当前事务完成。
检查数据目录完整性: 在进行任何进一步操作之前,建议对数据目录进行一次完整性检查,以确认是否有损坏。可以使用pg_verify_checksums工具来检查:
pg_verify_checksums -D /your/data/directory
如果发现有校验和错误,可能需要考虑从备份恢复或联系专业支持。
清理wal日志: 由于您在未关闭原主库的情况下尝试了pg_rewind,可能会导致WAL日志混乱。在确保服务已停的情况下,可以手动清理pg_wal目录中的旧WAL文件(请谨慎操作,确保有备份):
cd /your/data/directory/pg_wal
mv * /some/safe/place/for备份/
重新执行pg_rewind或使用备份恢复:
pg_rewind来对齐到新的主库(B)。请确保按照官方文档的正确步骤操作。配置恢复文件并重启服务: 在完成上述步骤后,确保recovery.conf(或在PG 10及以上版本是recovery.conf被合并到了postgresql.conf中)配置正确,指向新的主库(B)的地址,并包含必要的恢复设置。之后,尝试重新启动服务:
pg_ctl start -D /your/data/directory
请记得,在处理此类问题时,始终确保有最新的数据库备份,以防操作过程中发生不可逆的数据丢失。如果问题复杂,建议寻求专业的数据库管理员或阿里云的技术支持帮助。