KingbaseES V8R6 集群运维案例-- sys_internal.init.*文件引起sys_basebackup失败
案例说明:
KingbaseES V8R6集群在执行‘repmgr standby clone’或sys_basebackup克隆备库时出现如下图相关sys_internal.init文件错误:

适用版本:
KingbaseES V8R6
二、pg_internal.init文件原理
如上图所示,此故障和pg_internal.init文件有关,下面介绍有关此文件的工作机制(摘自pg官方文档)。
pg_internal.init: 用于缓存系统表,加快系统表读取速度(每个用户创建的数据库目录下也有同名文件)。
PostgreSQL中存在两种高速缓存:syscache和relcache。syscache主要用于缓存系统表元组;relcache中包含所有访问过的表的模式信息(包含系统表)。这两个缓存在数据库中不是共享的,是每个进程独有的,通过共享消息队列来进行同步。
relcache,初始化在initpostgres时完成;其中存储的内容(RelationData)会记录到本地文件pg_internal.init中;失效和刷新常发生于执行heap_delete和heap_update类似操作后,会有对应的机制进行缓存刷新。
如下图所示,初始化postgres过程:

启动postgres服务进程:初始化relcache管理环境
- 通过"global/pg_filenode.map"、"global/pg_internal.init"文件初始化共享catalog:"pg_catalog",将系统表"pg_database"、"pg_authid"、"pg_auth_members"等的描述符信息加载到relcache里。"global/pg_filenode.map"文件里存放的是数据库中关系和文件节点的映射信息,"global/pg_internal.init"文件里存放的是"pg_class"、"pg_attribute"、"pg_proc"、"pg_type"等系统关系信息。
- 然后完成设置数据库快照
- 根据hba文件完成客户端认证
- 从pg_database获取客户端要访问的数据库的对应元组
- 根据要访问的数据库ID,加载该数据库本地的"pg_filenode.map"、"pg_internal.init"文件完成初始化。加载"pg_class"、"pg_attribute"、"pg_proc"、"pg_type"等及其索引信息。如果从相关"pg_filenode.map"、"pg_internal.init"文件初始化失败,系统会从硬编码的代码中初始化基础设施相关关系信息。不管加载那个文件,完成相关信息初始化后如有必要将重写该文件。重写时先写临时文件,写完后改文件名为正式文件。这样做是为了避免并发的后台进程读相关文件时崩溃。关于文件名举个例子,例如文件"data/global/pg_internal.init",对应的临时文件名是"data/global/pg_internal.init.pid",最后的"pid"是当前进程ID。
- 调用CheckMyDatabase方法检查当前用户的数据库访问权限,从cache里的pg_database取当前数据库的相关属性字段。
- 调用InitializeClientEncoding方法初始化客户端字符编码。
- 调用pgstat_bestart方法在PgBackendStatus设置本进程状态。至此pg服务进程的初始化工作告一段落。
二、查看KingbaseES数据库sys_internal.init文件
1)global目录下系统表cache文件

2)base目录下系统表cache文件

如上图所示,在global或base目录下都有系统表的cache文件sys_internal.init,对于此文件管理方式为,不管加载那个文件,完成相关信息初始化后如有必要将重写该文件。重写时先写临时文件,写完后改文件名为正式文件。这样做是为了避免并发的后台进程读相关文件时崩溃。文件"data/global/pg_internal.init",对应的临时文件名是"data/global/pg_internal.init.pid",最后的"pid"是当前进程ID。如下图所示,在备库克隆过程中读取到了sys_internal.init的临时文件,导致clone失败。

3)查看主库下sys_internal.init临时文件

三、问题解决方案
sys_internal.init.pid,是sys_internal.init文件在写入时,产生的临时文件,写入成功后会改名为正式文件,此文件的存在有可能是数据库系统非正常关机导致临时文件没有被及时清理所致,可以通过手工方式将此类文件删除。删除此类文件后,重新执行备库的clone,clone成功。

KingbaseES V8R6 集群运维案例-- sys_internal.init.*文件引起sys_basebackup失败的更多相关文章
- KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例
案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...
- KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...
- KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例
案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- KingbaseES V8R3集群运维案例之---用户自定义表空间管理
案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...
- kingbaseES V8R6集群备份恢复案例之---备库作为repo主机执行物理备份
案例说明: 此案例是在KingbaseES V8R6集群环境下,当主库磁盘空间不足时,执行sys_rman备份,将集群的备库节点作为repo主机,执行备份,并将备份存储在备库的磁盘空间. 集群架构 ...
- KingbaseES V8R6集群外部备份案例
案例说明: 本案例采用sys_backup.sh执行物理备份,备份使用如下逻辑架构:集群采用CentOS 7系统,repo采用kylin V10 Server. 一主一备+外部备份 此场景为主备双机常 ...
- KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障
案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...
- KingbaseES V8R6集群维护案例之---停用集群node_export进程
案例说明: 在KingbaseES V8R6集群启动时,会启动node_exporter进程,此进程主要用于向kmonitor监控服务输出节点状态信息.在系统安全漏洞扫描中,提示出现以下安全漏洞: 对 ...
- KingbaseES V8R6集群维护之--修改数据库服务端口案例
案例说明: 对于KingbaseES数据库单实例环境,只需要修改kingbase.conf文件的'port'参数即可,但是对于KingbaseES V8R6集群中涉及到多个配置文件的修改,并且在应 ...
随机推荐
- 【Unity3D】血条(HP)
1 需求实现 人机交互Input 中实现了通过键盘控制坦克运动,通过鼠标控制坦克发射炮弹,本文将在此基础上,增加血条(HP)功能.炮弹命中后,HP 值会减少,因此需要应用到 刚体组件Rigidbo ...
- PL/SQL相关的数据字典
PL/SQL相关的数据字典 http://www.oracle.com/technetwork/issue-archive/2012/12-nov/o62plsql-1851968.html 有时候, ...
- djang中文件上传MEDIA路径配置
1.settings.py文件中配置 # 项目中存储上传文件的根目录[暂时配置],注意,uploads目录需要手动创建否则上传文件时报错 MEDIA_ROOT = os.path.join(BASE_ ...
- 4-request对象
前端提交数据 必备知识点 前端form表单中action属性,不写默认是当前路由地址 前端form表单中的method属性,不写默认是GET请求 前端页面 templates\register.htm ...
- 详细的BoltDB学习记录文档
最近项目中用到了boltdb这个go开发的key/value 数据库,但是之前并有接触过,所以特意去看了官方,也找了些资料,网上找的资料要不就是官方文档的翻译,要不就是简单的介绍一点,都不是很全,所以 ...
- 【Azure Developer】如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息
问题描述 如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息 问题解答 由于直接获取到的虚拟机信息(Virtual Machines - Get)中,并不会包含虚拟机的 ...
- C++ 函数指针,指针函数,左值右值
C++ 函数指针,指针函数,左值右值 1.函数指针 是一个指针类型的变量,存放的内容都是函数的指针,用来间接调用函数,格式如下: int add( int a, int b) { return a+b ...
- Java 小案列 this关键字使用+构造器 +方法+调用
1 package com.bytezero.thistest; 2 3 public class Boy 4 { 5 private String name; 6 private int age; ...
- MySQL---面经
如果想要对 MySQL 的索引树有更深入的了解,掘金的小册子:<MySQL 是怎样运行的> MySQL 是怎样运行的 以下是常见面试题 MySQL日志 MySQL日志系统 redo_log ...
- mysql标识列和事务
1 #标识列 2 /* 3 又称为自增长列 4 含义:可以不用手动的插入值,系统提供默认的序列值 5 6 7 特点: 8 1.标识列必须和主键搭配吗?不一定,但要求是一个key 9 2.一个表可以有几 ...