【MogDB/openGauss误删未归档的xlog日志如何解决】

在使用MogDB/openGauss数据库的过程中,有时候大量业务,或者导数据会导致pg_xlog下的日志数量持续增长,此时如果xlog的产生频率太快,而来不及自动清理,极有可能造成pg_xlog目录的打满。如果对数据库的xlog不太了解的时候,可能造成误删未归档的xlog日志,或者更严重地,把对应操作还未写入数据文件的xlog也删除了。

本文将讲解了通常情况下pg_xlog下的xlog文件所处状态,并总结了数据已经落盘但未进行归档的xlog日志被误删时,日志周期产生缺失xlog日志报错和归档失败问题的几种解决方法。

一、pg_xlog下xlog文件的状态

通常情况下我们是不建议手动删除pg_xlog下的日志的,因为pg_xlog下的xlog有自动清理机制,可以根据需求配置参数调整清理速度。

而正常情况下,pg_xlog下应该存在如下的三种状态的xlog文件,在开启归档的情况下,可以进行相关讨论:

第一种:对应数据已经落盘,已经进行完归档。pg_xlog/archive_status中的状态为.done

可以手动删除,对数据库无影响,但是不建议手动删除,因为pg_xlog下的xlog有自动清理机制,可以根据需求配置参数调整清理速度

第二种:对应数据已经落盘,未进行归档。pg_xlog/archive_status中的状态为.ready

数据已落盘,但是未归档,删除pg_xlog下的xlog后,对当前的数据库里的数据无影响,但是如果想基于全量备份和连续的归档日志做PITR,则会缺少日志,而且归档会因为缺失被删除的这部分xlog而失败,后续归档都不成功,从而阻塞pg_xlog下xlog日志的正常的自动清理,数据库会打印相关报错:

DETAIL:  The failed archive command was: "cp pg_xlog/000000010000000200000071 /data/om3/data/archivedir/000000010000000200000071 "
cp: cannot stat 'pg_xlog/000000010000000200000071': No such file or directory

第三种:对应数据未落盘,未进行归档

刚写完xlog,但是数据还未落盘,此时删除xlog可能会丢数据,而且数据库可能服务出现问题,数据库无法启动,可能需要使用pg_resetxlog工具清理xlog,并重置pg_control文件中的一些其他控制信息,来保证数据库正常启动。pg_resetxlog将作为数据库修复的最后手段使用。而且修复而启动数据库后,可能会由于部分提交的事务,导致数据库和之前的数据不一致的情况。

image.png

二、处于第二种时,误删未归档的xlog日志报错如何解决

本篇测试内容使用的主要归档参数是archive_mode和archive_command。数据库版本是MogDB-3.0.5。

MogDB=# show archive_mode ;
 archive_mode 
--------------
 on
(1 row)

MogDB=# show archive_command ;
           archive_command           
-------------------------------------
 cp %p /data/om3/data/archivedir/%f 
(1 row)

MogDB=# show archive_dest ;
 archive_dest 
--------------
 
(1 row)

1、临时调整archive_command

如果是使用archive_command这个参数决定归档行为的时候,可以从archive_command命令下手,修改这个归档命令,骗过数据库说归档成功了。

如下环境已经模拟出了误删未归档的xlog的现象

om3@lmt0003 archive_status]$ rm ../000000010000000200000074

[om3@lmt0003 archive_status]$ cat  /data/om3/log/pg_log/dn_6001/postgresql-2023-11-01_115121.log | grep 000000010000000200000074|more
cp: cannot create regular file '/data/om3/data/archivedir/1/000000010000000200000074': No such file or directory2023-11-01 14:55:21.521 [unk
nown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] LOG:  archive command failed with exit code 1
2023-11-01 14:55:21.521 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] DETAIL:  The failed archive command was: "cp pg_xl
og/000000010000000200000074 /data/om3/data/archivedir/1/000000010000000200000074 " 
cp: cannot create regular file '/data/om3/data/archivedir/1/000000010000000200000074': No such file or directory2023-11-01 14:55:22.527 [unk
nown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] LOG:  archive command failed with exit code 1
2023-11-01 14:55:22.527 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] DETAIL:  The failed archive command was: "cp pg_xl
og/000000010000000200000074 /data/om3/data/archivedir/1/000000010000000200000074 " 
cp: cannot create regular file '/data/om3/data/archivedir/1/000000010000000200000074': No such file or directory2023-11-01 14:55:23.532 [unk
nown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] LOG:  archive command failed with exit code 1
2023-11-01 14:55:23.532 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] DETAIL:  The failed archive command was: "cp pg_xl
og/000000010000000200000074 /data/om3/data/archivedir/1/000000010000000200000074 " 
2023-11-01 14:55:23.532 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] WARNING:  xlog file "000000010000000200000074" cou
ld not be archived: too many failures

[om3@lmt0003 pg_xlog]$ cd archive_status/
[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000071.done  000000010000000200000073.done
000000010000000200000070.done  000000010000000200000072.done  000000010000000200000074.ready
[om3@lmt0003 archive_status]$ gsql -r
gsql ((MogDB 3.0.5 build 76182eb6) compiled at 2023-07-20 16:53:13 commit 0 last mr 1801 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

MogDB=# select pg_switchover_xlog();
MogDB=# select pg_switch_xlog();
 pg_switch_xlog 
----------------
 2/750019D8
(1 row)

MogDB=# \q
[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000071.done  000000010000000200000073.done   000000010000000200000075.ready
000000010000000200000070.done  000000010000000200000072.done  000000010000000200000074.ready

1、修改postgresql.conf


[om3@lmt0003 archive_status]$ vi ../../postgresql.conf

archive_mode = on                                           
#archive_command = 'cp %p /data/om3/data/archivedir/%f '               
archive_command = 'ls -l /data/om3/data/ '           #别的命令也可以,只要执行的时候不报错就可以。达到骗过数据库的目的就可以。  

2.刷新配置

[om3@lmt0003 archive_status]$ gs_ctl reload

3.不产生error日志,并且archive_status的状态变为done


[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000071.done  000000010000000200000073.done   000000010000000200000075.ready
000000010000000200000070.done  000000010000000200000072.done  000000010000000200000074.ready
[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000071.done  000000010000000200000073.done   000000010000000200000075.ready
000000010000000200000070.done  000000010000000200000072.done  000000010000000200000074.ready
[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000071.done  000000010000000200000073.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000072.done  000000010000000200000074.done

-----归档的报错之前大概每一分钟打印一次,每次打印多行。

[om3@lmt0003 archive_status]$ cat  /data/om3/log/pg_log/dn_6001/postgresql-2023-11-01_115121.log | grep 000000010000000200000074|tail -n 5
cp: cannot stat 'pg_xlog/000000010000000200000074': No such file or directory2023-11-01 15:00:17.297 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] LOG:  archive command failed with exit code 1
2023-11-01 15:00:17.297 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] DETAIL:  The failed archive command was: "cp pg_xlog/000000010000000200000074 /data/om3/data/archivedir/000000010000000200000074 " 
cp: cannot stat 'pg_xlog/000000010000000200000074': No such file or directory2023-11-01 15:00:18.302 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] LOG:  archive command failed with exit code 1
2023-11-01 15:00:18.302 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] DETAIL:  The failed archive command was: "cp pg_xlog/000000010000000200000074 /data/om3/data/archivedir/000000010000000200000074 " 
2023-11-01 15:00:18.302 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] WARNING:  xlog file "000000010000000200000074" could not be archived: too many failures
[om3@lmt0003 archive_status]$ date
Wed Nov  1 15:13:43 CST 2023

4、修改postgresql.conf为正常。

archive_mode = on                                           
archive_command = 'cp %p /data/om3/data/archivedir/%f '               
#archive_command = 'ls -l /data/om3/data/ '  

然后刷新配置。这样就一切恢复正常了。只是缺少了删除的这部分xlog以及欺骗数据库归档命令期间的xlog,参数调整回来的后续日志可以继续归档。也解决了持续产生日志报错的问题。

[om3@lmt0003 archive_status]$ gs_ctl reload

2、修改archive_status目录下误删的xlog对应的xxx.ready状态文件

如下环境已经模拟出了误删未归档的xlog的现象

om3@lmt0003 pg_xlog]$ rm 000000010000000200000071

image.png

日志出现相关报错
 

image.png


并且后续的xlog日志

image.png


 

image.png


查看日志打印频率,每一分钟打印一次,一次打印多行

image.png

手动将archive_status下日志提示的缺少的xlog对应的状态文件的xxx.ready改成xxx.done

om3@lmt0003 archive_status]$ cp 000000010000000200000071.ready 000000010000000200000071.ready_bak
om3@lmt0003 archive_status]$ mv 000000010000000200000071.ready 000000010000000200000071.done

日志不再报错,除了丢失的xlog外,后续日志可以正常进行归档。

image.png

image.png

3.删除archive_status目录下误删的xlog对应的xxx.ready状态文件

模拟误删未归档的xlog的现象

[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000071.done  000000010000000200000073.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000072.done  000000010000000200000074.done

[om3@lmt0003 archive_status]$ gsql -r
gsql ((MogDB 3.0.5 build 76182eb6) compiled at 2023-07-20 16:53:13 commit 0 last mr 1801 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

MogDB=# select pg_switch_xlog();
 pg_switch_xlog 
----------------
 2/7600BAC0
(1 row)

MogDB=# \q
[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000071.done  000000010000000200000073.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000072.done  000000010000000200000074.done  000000010000000200000076.ready
[om3@lmt0003 archive_status]$ rm ../000000010000000200000076
[om3@lmt0003 archive_status]$ cat  /data/om3/log/pg_log/dn_6001/postgresql-2023-11-01_115121.log | grep 000000010000000200000076|tail -n 5cp: cannot create regular file '/data/om3/data/archivedir/1/000000010000000200000076': No such file or directory2023-11-01 15:25:37.642 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] LOG:  archive command failed with exit code 1
2023-11-01 15:25:37.642 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] DETAIL:  The failed archive command was: "cp pg_xlog/000000010000000200000076 /data/om3/data/archivedir/1/000000010000000200000076 " 
cp: cannot create regular file '/data/om3/data/archivedir/1/000000010000000200000076': No such file or directory2023-11-01 15:25:38.647 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] LOG:  archive command failed with exit code 1
2023-11-01 15:25:38.647 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] DETAIL:  The failed archive command was: "cp pg_xlog/000000010000000200000076 /data/om3/data/archivedir/1/000000010000000200000076 " 
2023-11-01 15:25:38.647 [unknown] [unknown] localhost 70393223549024 0[0:0#0] 0 [BACKEND] WARNING:  xlog file "000000010000000200000076" could not be archived: too many failures

MogDB=# select pg_switch_xlog();
 pg_switch_xlog 
----------------
 2/77001AC8
(1 row)

MogDB=# \q
[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000072.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000073.done  000000010000000200000076.ready
000000010000000200000071.done  000000010000000200000074.done  000000010000000200000077.ready

在pg_xlog/archive_status下删除缺失的xlog对应的xxx.ready的状态文件

00000001000000020000006F.done  000000010000000200000072.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000073.done  000000010000000200000076.ready
000000010000000200000071.done  000000010000000200000074.done  000000010000000200000077.ready

[om3@lmt0003 archive_status]$ mv 000000010000000200000076.ready 000000010000000200000076.ready_bak
[om3@lmt0003 archive_status]$ rm -rf 000000010000000200000076.ready

[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000072.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000073.done  000000010000000200000076.ready_bak
000000010000000200000071.done  000000010000000200000074.done  000000010000000200000077.ready

发现日志已经不再报缺失xlog以及归档失败的error了,而且后续pg_xlog下的xlog日志可以正常进行归档。

[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000072.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000073.done  000000010000000200000076.ready_bak
000000010000000200000071.done  000000010000000200000074.done  000000010000000200000077.ready
[om3@lmt0003 archive_status]$ tail -f  /data/om3/log/pg_log/dn_6001/postgresql-2023-11-01_115121.log | grep 000000010000000200000076^C

[om3@lmt0003 archive_status]$ ls
00000001000000020000006F.done  000000010000000200000072.done  000000010000000200000075.done
000000010000000200000070.done  000000010000000200000073.done  000000010000000200000076.ready_bak
000000010000000200000071.done  000000010000000200000074.done  000000010000000200000077.done

[om3@lmt0003 archive_status]$ cd ../../archivedir/
[om3@lmt0003 archivedir]$ ls 000000010000000200000077
000000010000000200000077

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/118729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决Java中https请求接口报错问题

1. 解决SSLException: Certificate for <域名> doesn‘t match any of the subject alternative报错问题 1.1 问题描述 最近在做一个智能问答客服项目,对接的是云问接口,然后云问接口对接使用的是https方式,之前一直…

git push超过100MB大文件失败(remote: fatal: pack exceeds maximum allowed size)

push代码的时候,有时会出现如下问题 remote: fatal: pack exceeds maximum allowed size error: failed to push some refs to ‘git.n.xiaomi.com:fuzheng1/nl2sql.git’ 解决方案: 将本地 http.postBuffer 数值调整到GitHub服务对应的单次上传大小配置…

凭什么不让使用外键!?

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 434 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) MySQL 外键(Foreign Key)是用于建立表之间关系的,它定义了一个表中的一列或一组…

IDEA JAVA项目 导入JAR包,打JAR包 和 JAVA运行JAR命令提示没有主清单属性

一、导入JAR包 1、java项目在没有导入该jar包之前,如图:2、点击 File -> Project Structure(快捷键 Ctrl Alt Shift s),点击Project Structure界面左侧的“Modules”如图:3.在 “Dependencies” 标签…

Javaweb之javascript的详细解析

JavaScript html完成了架子,css做了美化,但是网页是死的,我们需要给他注入灵魂,所以接下来我们需要学习JavaScript,这门语言会让我们的页面能够和用户进行交互。 1.1 介绍 通过代码/js效果演示提供资料进行效果演示&…

使用Kotlin与Unirest库抓取音频文件的技术实践

目录 摘要 一、Kotlin与Unirest库概述 二、使用Kotlin和Unirest抓取音频文件 1、添加Unirest依赖 2、发送HTTP请求获取音频文件 3、保存音频文件 三、完整代码示例 四、注意事项 结论 摘要 本文详细阐述了如何使用Kotlin编程语言与Unirest库抓取网络上的音频文件。首…

kimera论文阅读

功能构成: Kimera包括四个关键模块: Kimera-VIO的核心是基于gtsam的VIO方法[45],使用IMUpreintegration和无结构视觉因子[27],并在EuRoC数据集上实现了最佳性能[19]; Kimera-RPGO:一种鲁棒姿态图优化(RPGO)方法,利用现代技术进…

伦敦金周末可以交易吗,黄金休市时间是那些?

伦敦金是国际性投资产品,主要交易中心有亚洲、欧洲和美洲,在时差的作用下,三大市场相互连接,形成了全天24小时几乎不间断的交易时间,也为炒金者们提供了充分的操作机会。即便如此,在一些特定的时间段内&…

springboot前后端时间类型传输

springboot前后端时间类型传输 前言1.java使用时间类型java.util.Date2.java使用localDateTime 前言 springboot前后端分离项目总是需要进行时间数据类型的接受和转换,针对打代码过程中不同的类型转化做个总结 1.java使用时间类型java.util.Date springboot的项目中使用了new …

电脑发热发烫,具体硬件温度达到多少度才算异常?

环境: 联想E14 问题描述: 电脑发热发烫,具体硬件温度达到多少度才算异常? 解决方案: 电脑硬件的温度正常范围会因设备类型和使用的具体硬件而有所不同。一般来说,以下是各种硬件的正常温度范围: CPU:正…

【10套模拟】【2】

关键字: 哈希函数解决问题、进栈、无向图边与度、双向链表插入新结点、折半查找判定树ASL、孩子兄弟表示法、树变二叉、快排partiction划分

如何获取HuggingFace的Access Token;如何获取HuggingFace的API Key

Access Token通过编程方式向 HuggingFace 验证您的身份,允许应用程序执行由授予的权限范围(读取、写入或管理)指定的特定操作。您可以通过以下步骤获取: 1.首先,你需要注册一个 Hugging Face 账号。如果你已经有了账号…

jenkins展示html报告样式需要注意的要点

一、jenkins展示html报告样式需要注意的要点 最后:

Docker 持久化存储和数据共享_Volume

有些容器会自动产生一些数据,为了不让数据随着 container 的消失而消失,保证数据的安全性。例如:数据库容器,数据表的表会产生一些数据,如果我把 container 给删除,数据就丢失。为了保证数据不丢失&#xf…

【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成

文章目录 一、监控有哪些指标二、prometheus、grafana架构Prometheus 组件Grafana 组件架构优点 三、安装prometheus和node-exporter1. docker pull镜像2. 启动node-exporter3. 启动prometheus 四、promql基本语法五、grafana的安装和使用1. 新建空文件夹grafana-storage&#…

webgoat-Broken Access ControlI 访问控制失效

Insecure Direct Object References 直接对象引用 直接对象引用是指应用程序使用客户端提供的输入来访问数据和对象。 例子 使用 GET 方法的直接对象引用示例可能如下所示 https://some.company.tld/dor?id12345 https://some.company.tld/images?img12345 https://some.…

Newman+Jenkins实现接口自动化测试

一、是什么Newman Newman就是纽曼手机这个经典牌子,哈哈,开玩笑啦。。。别当真,简单地说Newman就是命令行版的Postman,查看官网地址。 Newman可以使用Postman导出的collection文件直接在命令行运行,把Postman界面化运…

ViT模型中的tokens和patches概念辨析

概念辨析 在ViT模型中,“tokens”(令牌)和"patches"(图像块)是两个相关但不同的概念。 令牌(Tokens):在ViT中,令牌是指将输入图像分割成固定大小的图块&#…

有人物联网模块连接阿里云物联网平台的方法

摘要:本文介绍有人物联网模块M100连接阿里云的参数设置,作为说明书的补充。 没有阿里云功能需求的请略过本文,不要浪费您宝贵的时间。 网络选择LTE,请先确保插入的SIM卡有流量。 接下来配置阿里云云服务。如下图所示,…

【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)

C 入门 四 1.内联函数1.1前言(引出内联函数)①写一个Add函数的宏定义②宏的缺点③C对宏的态度 1.2内联函数①概念②内联函数特性 2.auto关键字(C11)① 类型别名思考② auto简介③ auto的使用细则④ auto不能推导的场景 3. 基于范围的for循环(C11)① 范围…