案例说明:
KingbaseES V8R6集群执行‘repmgr standby clone’或sys_basebackup克隆备库时出现如下图相关sys_internal.init文件错误:
适用版本: KingbaseES V8R6
一、关于sys_internal.init文件
sys_internal.init: 用于缓存系统表,加快系统表读取速度(每个用户创建的数据库目录下也有同名文件)。
二、查看KingbaseES数据库sys_internal.init文件
1)global目录下系统表cache文件
2)base目录下系统表cache文件
如上图所示,在global或base目录下都有系统表的cache文件sys_internal.init,对于此文件管理方式为,不管加载那个文件,完成相关信息初始化后如有必要将重写该文件。重写时先写临时文件,写完后改文件名为正式文件。这样做是为了避免并发的后台进程读相关文件时崩溃。 文件"data/global/sys_internal.init",对应的临时文件名是"data/global/sys_internal.init.pid",最后的"pid"是当前进程ID。
如下图所示,在备库克隆过程中读取到了sys_internal.init的临时文件,导致clone失败。
3)查看主库下sys_internal.init临时文件
三、问题解决方案
sys_internal.init.pid,是sys_internal.init文件在写入时,产生的临时文件,写入成功后会改名为正式文件,此文件的存在有可能是数据库系统非正常关机导致临时文件没有被及时清理所致,可以通过手工方式将此类文件删除。删除此类文件后,重新执行备库的clone,clone成功。 更多信息,参见https://help.kingbase.com.cn/v8/index.html