我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
今天在帮朋友重建PG备库数据库,一共就200多G的数据库,重建了2个小时都没有重建完,也不至于这么慢啊,感觉有点奇怪,于是对pg_auto_failover的日志进行,此时发现一直不断在重复的备份表空间,这明显不正常了,难道是pg_auto_failover里面出什么问题了,反复对数据库进行备份,于是对日志进行详细的分析,发现下面的信息:
11:32:24 2986905 INFO 120293644/120293644 kB (100%), 0/1 表空间 (...up/node_3/log/postgresql-Sun.log)
11:32:24 2986905 INFO pg_basebackup:
11:32:24 2986905 INFO 错误: 无法得到复制数据流: ??: ?????tar????:'elect "123123131", "12312312312312", "12312312312", "123123123123", "123123123", "12312312312", "123123123", "12312312312312'
11:32:24 2986905 INFO pg_basebackup: 删除数据目录 "/postgresql/data/14/backup/node_3" 的内容
11:32:29 2986905 ERROR Failed to run pg_basebackup: exit code 1
11:32:29 2986905 ERROR Failed to initialize standby server, see above for details
11:32:29 2986905 ERROR Failed to transition from state "wait_standby" to state "catchingup", see above.
11:32:29 2946374 ERROR pg_autoctl service node-active exited with exit status 12
11:32:29 2946374 INFO Restarting service node-active
11:32:29 3006852 INFO Continuing from a previous `pg_autoctl create` failed attempt
11:32:29 3006852 INFO PostgreSQL state at registration time was: PGDATA does not exist
11:32:29 3006852 INFO FSM transition from "wait_standby" to "catchingup": The primary is now ready to accept a standby
11:32:29 3006852 INFO Initialising PostgreSQL as a hot standby
11:32:29 3006852 INFO /postgresql/software/14/bin/pg_basebackup -w -d 'application_name=pgautofailover_standby_3 host=192.168.111.111 port=5433 user=pgautofailover_replicator sslmode=require' --pgdata /var/lib/pgsql
/14/backup/node_3 -U pgautofailover_replicator --verbose --progress --max-rate 100M --wal-method=stream --slot pgautofailover_standby_3
11:32:29 3006852 INFO pg_basebackup: 开始基础备份,等待检查点完成
11:32:33 3006852 INFO pg_basebackup: 已完成检查点
11:32:33 3006852 INFO pg_basebackup: 预写日志起始于时间点: 23D/23080028, 基于时间轴7
这里发现Failed to run pg_basebackup: exit code 1这个错误,当遇到这个错误是pg_auto_failover自动清理环境,再次重新进行备份,一直这样反复去做,所以才出现了长时间未完成的现象。
出发pg_basebackup退出的原因是:
11:32:24 2986905 INFO 错误: 无法得到复制数据流: ??: ?????tar????:"log/'elect "123123131", "12312312312312", "12312312312", "123123123123", "123123123", "12312312312", "123123123", "12312312312312'
这里有个奇怪的现象,有中文显示,又有乱码显示,不知道是什么原因了。在日志中有个关键词tar,并且后面有log/elect等信息,所以这里我们猜测会不会是pg_basebackup在tar备份文件时有异常导致的。这个思路马上马上被自己给否定了,因为数据库版本是14,此版本默认是plain方式,并且上面备份中也并没有指定备份的格式。沉思了一会儿,也搜了一会儿,也没有找到相同的案例。还遇到最核心的信息为乱码。
实在没有办法了,去主库上面查看一下log文件的信息:
'elect "123123131", "12312312312312", "12312312312", "123123123123", "123123123", "12312312312", "123123123", "12312312312312'
在log下面果真有这样的信息。
通过rm删除日志文件,再次重建备库,顺利重建完成。
——————作者介绍———————–
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)
PG故障处理:一次pg_auto_failover重建备库失败的分析:等您坐沙发呢!