PostgreSQL 恢复模式错误日志增强 - 提供正在恢复的WAL(XLOG)文件位置

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 标签PostgreSQL , the database system is starting up , the database system is in recovery mode背景当数据库异常停库,再次启动时。

标签

PostgreSQL , the database system is starting up , the database system is in recovery mode


背景

当数据库异常停库,再次启动时。又或者由于进程CRASH后自动重启时。需要进入恢复模式,恢复完成后,数据库才能正常交互。

在启动过程中,正在恢复时,如果此时连接数据库,会报错如下:

the database system is starting up  

用户只看这个信息,并不知道数据库还要启动多久,现在已经恢复到什么状态了?

内核层面可以稍作改进,报错时,同时输出正在恢复的WAL位点,以及距离最后一个文件的WAL位点差多少MB没有恢复。这样用户大概就还知道还需要多久。

src/backend/postmaster/postmaster.c

/*  
 * Read a client's startup packet and do something according to it.  
 *  
 * Returns STATUS_OK or STATUS_ERROR, or might call ereport(FATAL) and  
 * not return at all.  
 *  
 * (Note that ereport(FATAL) stuff is sent to the client, so only use it  
 * if that's what you want.  Return STATUS_ERROR if you don't want to  
 * send anything to the client, which would typically be appropriate  
 * if we detect a communications failure.)  
 */  
static int  
ProcessStartupPacket(Port *port, bool SSLdone)  
{  
  
.......  
  
        /*  
         * If we're going to reject the connection due to database state, say so  
         * now instead of wasting cycles on an authentication exchange. (This also  
         * allows a pg_ping utility to be written.)  
         */  
        switch (port->canAcceptConnections)  
        {  
                case CAC_STARTUP:  
                        ereport(FATAL,  
                                        (errcode(ERRCODE_CANNOT_CONNECT_NOW),  
                                         errmsg("the database system is starting up")));  
                        break;  
                case CAC_SHUTDOWN:  
                        ereport(FATAL,  
                                        (errcode(ERRCODE_CANNOT_CONNECT_NOW),  
                                         errmsg("the database system is shutting down")));  
                        break;  
                case CAC_RECOVERY:  
                        ereport(FATAL,  
                                        (errcode(ERRCODE_CANNOT_CONNECT_NOW),  
                                         errmsg("the database system is in recovery mode")));  
                        break;  
                case CAC_TOOMANY:  
                        ereport(FATAL,  
                                        (errcode(ERRCODE_TOO_MANY_CONNECTIONS),  
                                         errmsg("sorry, too many clients already")));  
                        break;  
                case CAC_WAITBACKUP:  
                        /* OK for now, will check in InitPostgres */  
                        break;  
                case CAC_OK:  
                        break;  
        }  
  
        return STATUS_OK;  
}  

src/backend/access/transam/xlog.c

/*  
 * This must be called ONCE during postmaster or standalone-backend startup  
 */  
void  
StartupXLOG(void)  
{  
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
DataWorks Java 关系型数据库
DataWorks常见问题之将预警信息发送至邮箱
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
44 1
|
5月前
|
存储 Oracle 关系型数据库
postgresql数据库|wal日志的开启以及如何管理
postgresql数据库|wal日志的开启以及如何管理
373 0
|
4月前
|
关系型数据库 Linux PostgreSQL
这个错误是因为Flink CDC在尝试访问PostgreSQL的"decoderbufs"文件时,发现该文件不存在
【1月更文挑战第23天】【1月更文挑战第111篇】这个错误是因为Flink CDC在尝试访问PostgreSQL的"decoderbufs"文件时,发现该文件不存在
47 11
|
8月前
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
617 1
|
13天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中,如何通过PolarDB for MySQL来查看binlog日志
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
28 1
|
3月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
40 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL中的WAL技术
MySQL中的WAL技术
|
4月前
|
SQL 关系型数据库 分布式数据库
在PolarDB中,慢日志明细中记录的耗时包括这个等待时间吗?
在PolarDB中,慢日志明细中记录的耗时包括这个等待时间吗?
46 0
|
5月前
|
SQL 关系型数据库 MySQL
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
MySQL【实践 02】MySQL迁移到PostgreSQL数据库的语法调整说明及脚本分享(通过bat命令修改mapper文件内的SQL语法)
129 0
|
5月前
|
SQL 关系型数据库 Shell
postgresql|数据库|批量执行SQL脚本文件的shell脚本
postgresql|数据库|批量执行SQL脚本文件的shell脚本
154 0

相关产品

  • 云原生数据库 PolarDB