当前位置: 首页 > news >正文

【技术实操】银河高级服务器操作系统实例分享,数据库日志文件属主不对问题分析

1. 问题现象描述

2023 年 06 月 30 日在迁移数据库过程中,遇到数据库 crash 的缺陷,原因如下:在数据库启动时候生成的一组临时文件中,有 owner 为 root 的文件, 文件权限默认为 640, 当数据库需要使用的时候, mysql 用户又没有权限,然后直接导致数据库 crash,临时文件如下:

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo1_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo2_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo3_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo4_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo5_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo6_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo7_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo8_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo9_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo10_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo11_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo12_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo13_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo14_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo15_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo16_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo17_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo18_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo19_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo20_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo21_tmp'

-rw-r----- 1 mysql dbgrp 33554432 Jun 30 17:44 '#ib_redo22_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo23_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo24_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo25_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo26_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo27_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo28_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo29_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo30_tmp'

-rw-r----- 1 root dbgrp 33554432 Jun 30 17:44 '#ib_redo31_tmp'

-rwxrwxrwx 1 mysql dbgrp 33554432 Jun 30 17:46 '#ib_redo0'

通过分析代码发现,这些都是在数据库启动的时候一起创建的,启动的时候,会删除现有的临时文件(带 tmp 的文件),然后再根据#ib_redoN_tmp(本例为 0), 创建后续的临时文件,本例从#ib_redo1_tmp 开始,创建 31 个临时文件,但是,经常出现后面几个文件的 owner 变成了 root, 具体有几个文件的 owner 是 root 也不固定,有时候只有 1-2 个,有时候有 10 来个,有时候一个都没有。

现场认为: 从理论上跟实际来讲, MySQlD 进程创建的所有文件的 owner ,都应该

是 mysql , mysql 没有理由跟必要去修改自己的文件的 owner 为 root, 通过官方网站的后续版本也没有发现关于这个现象的任何介绍,目前暂时怀疑是操作系统创建文件时的一些差异。

2. 问题分析

检查 my.conf 中配置的相关 mysql 目录权限,目录属主和属组为 mysql:dbgrp,

未发现异常。 my.cnf 如图 1

图 1

mysql 相关目录及权限如图 2,值得注意的是网上有提到, mysql 有些日志目录权

限不能为 777,得改成 700,如 redo_log 目录(此处仅作为参考供数据库厂家确认)

图 2

检查 my.cnf 文件配置参数,发现未配置 user=mysql 参数,但是检查 mysql 进程可以看到进程启动是带了—user=mysql 的,所以 mysqld 进程是完全以 mysql 用户启

动的,未见异常,如图 3

图 3

将启动脚本写在 /etc/rc.local 中,重启服务器进行测试,数据库产生的临时文件属主正常。但是如果在启动之后, 将启动脚本写在/etc/rc.local 中,执行systemctl restart rc-local,这样启动数据库后,有概率性产生的#ib_redoN_tmp文件属主不正常,并且每次都是从#ib_redo26_tmp 开始才会有属主为 root 的问题,#ib_redo25_tmp 及之前的 tmp 文件属主为正常的 mysql。 如图 4

图 4

/etc/rc.local 启动脚本如图 5

图 5

怀疑是写在 rc-local 中,有些资源或者配置没有完全加载完的原因,或者是环境变量不一致的原因导致的该差异。由于现场没有 root 密码,不能以 single 的方式进入单用户进行验证,所以后续将重点放在了环境量是否有差异上面。

经过测试,通过堡垒机的方式 ssh 到服务器上,执行数据库启动命令存在#ib_redoN_tmp 属主为 root 的问题、通过平台 console 的方式同样也有该问题,但是,如果是先通过堡垒机方式 ssh 到服务,然后执行 su - root 的方式,这样在启动数据库,就不会有问题。这步怀疑,可能是几种登录方式的不一致,各自的环境变量不同导致的该问题。

通过 set > /tmp/set.baolei 和 su - root 后 set > /tmp/set.root 做对比vimdiff /tmp/set.baolei /tmp/set.root 发现变量存在很大差异,包含 PATH 等变量均有不同处。 Vimdiff 结果如图 6、图 7、图 8

图 6

图 7

图 8

查看当前系统相关环境变量配置文件,如: /etc/profile, /root/.bashrc/root/.bash_profile 等,无异常 mysql 变量,如图 9、图 10、图 11

图 9

图 10

图 11

从 目 前 来 看 , 环 境 变 量 的 不 一 致 并 非 /etc/profile 、 /root/.bashrc 、/root/.bash_profile 引起,而是由于登录方式的不一致导致。

继续寻找根源,配置 audit 审计规则,发现异常时候, audit 审计到虽然都是mysqld 进程里面的某个线程创建的#ib_redo26_tmp 文件,但是异常时候, euid 也就是有效用户却是 root 而非 mysql, 如图 12

图 12

而正常时候, audit 审计到的有效用户 euid 却是 mysql, 如图 13,怀疑是 mysqld在创建第#ib_undo26_tmp 之前,有一段逻辑将有效用户设置为了 root。

图 13

通 过 strace 抓 取 异 常 和 正 常 时 候 的 系 统 调 用 , 发 现 异 常 时 候 , 在 创建!ib_redo25_tmp 和!ib_redo26_tmp 之间存在 setreuid 设置 uid 行为, `setreuid(-1,0)=0`是一个系统调用的返回值,表示调用成功执行。具体来说,这个系统调用是用于修改进程的实际用户 ID(ruid)和有效用户 ID(euid),其中, `-1`表示保持原有的 ruid 不变, `0`表示将 euid 设置为 0(即 root 用户)。

在 Linux 系统中,进程的 ruid 和 euid 通常是相同的。通过`setreuid()`系统调用,可以修改进程的 ruid 和 euid,从而改变进程的权限。如果这个调用返回了 0,则表示修改成功,否则返回的是一个错误码,表示修改失败。 如图 14

这也和从!ib_redo26_tmp 及之后的属主变成 root 吻合。

图 14

而正常时候的 strace 信息,则是在线程创建完所有的#!b_redoN_tmp 之后,才执行 setreuid 操作,如图 15。

图 15

通过以上分析,发现启动过程中调用了 setreuid 方法,对比异常与正常日志,发现此参数出现的位置也所有不同,正常的是在日志生成后才有设置 setereuid,而异常的是在日志生成过程产生,从而有 root 属主问题,其中 setreuid 参数调用时会修改有效用户导致后续生产日志文件属主变 root。

并且在 mysql 的源码中,存在设置 euid 逻辑的代码, 如图 16, 需要麻烦数据库厂家同事一起排查,是否是由于环境变量不一致,触发了数据库里面的某一段逻辑,使得提前执行了 setreuid 的操作,从而导致了后续#ib_redoN_tmp 文件属组变成了root。

图 16

3. 问题分析结果

初步怀疑是由于 msyqld 提前调用 setreuid 将线程的有效用户设置为了 root,使得接下里产生的日志文件属主变成了 root,需要数据库厂家结合代码看一下该段逻辑是怎么样的,看是否和环境变量有直接或者间接的关系。

相关文章:

【技术实操】银河高级服务器操作系统实例分享,数据库日志文件属主不对问题分析

1. 问题现象描述 2023 年 06 月 30 日在迁移数据库过程中,遇到数据库 crash 的缺陷,原因如下:在数据库启动时候生成的一组临时文件中,有 owner 为 root 的文件, 文件权限默认为 640, 当数据库需要使用的时…...

函数的创建和调用

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 提到函数,大家会想到数学函数吧,函数是数学最重要的一个模块,贯穿整个数学学习过程。在Python中,函数…...

数模混合芯片设计中的修调技术是什么?

一、修调目的 数模混合芯片需要修调技术主要是因为以下几个原因: 工艺偏差(Process Variations): 半导体制造过程中存在不可避免的工艺偏差,如晶体管尺寸、阈值电压、电阻和电容值等,这些参数的实际值与…...

MySQL 自定义函数(实验报告)

一、实验名称: 自定义函数 二、实验日期: 2024年 6 月 1 日 三、实验目的: 掌握MySQL自定义函数的创建及调用; 四、实验用的仪器和材料: 硬件:PC电脑一台; 配置:内存&#…...

一次职业院校漏洞挖掘

这个是之前挖掘到的漏洞,目前网站进行重构做了全新的改版,但是这个漏洞特别经典,拿出来进行分享。看到src上面的很多敏感信息泄露,所以自己也想找一个敏感信息泄露,官网如图: 发现在下面有一个数字校园入口…...

洪师傅代驾系统开发 支持公众号H5小程序APP 后端Java源码

代驾流程图 业务流程图 管理端设置 1、首页装修 2、师傅奖励配置 师傅注册后,可享受后台设置的新师傅可得的额外奖励; 例:A注册了师傅,新人奖励可享受3天,第一天的第一笔订单完成后可得正常佣金佣金*奖励比例 完成第二笔/第三笔后依次可得正常佣金佣金*奖励比例 完成的第四…...

View->Bitmap缩放到自定义ViewGroup的任意区域(Matrix方式绘制Bitmap)

Bitmap缩放和平移 加载一张Bitmap可能为宽高相同的正方形,也可能为宽高不同的矩形缩放方向可以为中心缩放,左上角缩放,右上角缩放,左下角缩放,右下角缩放Bitmap中心缩放,包含了缩放和平移两个操作&#xf…...

Centos 7部署NTP

介绍 NTP是Network Time Protocol(网络时间协议)的简称,它是用来通过互联网或局域网将计算机时钟同步到世界协调时间(UTC)的协议。 安装 # yum安装 yum install -y ntp# 离线安装 #下载地址:https://mir…...

【前缀和】42. 接雨水

本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入&am…...

我的名字叫大数据

第1章 大家好,我叫大数据 1.1 我的家族传统:从我小小的祖先到壮大的我 1.1.1 最初的我:原始部落里的计数石头 大家好,我是你们人类文明的“老朋友”——大数据。你们知道吗?在我还没有变成你们手机、电脑里飞速跑动的那些数字前,我最初的模样可是一块块“计数石头”。…...

数据库漫谈-infomix

infomix数据库知名度不高,主要跟它的定位有关,它主要用于unix操作系统:Informix便是取自Information和Unix的结合,它也是第一个支持linux系统的数据库。它其实在金融、电信行业使用率非常高。98年,当时我在做银行领域的…...

【Qt】Qt界面美化指南:深入理解QSS样式表的应用与实践

文章目录 前言:1. 背景介绍2. 基本语法3. QSS 设置方式3.1. 设置全局样式3.2. 从文件加载样式表3.3. 使用 Qt Designer 编辑样式 总结: 前言: 在当今这个视觉至上的时代,用户界面(UI)的设计对于任何软件产…...

七彩云南文化旅游网站的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,游客管理,导游管理,旅游景点管理,酒店信息管理 前台账户功能包括:系统首页,个人中心,论坛,旅…...

7-zip安装教程

一、简介 7-Zip 是一款开源的文件压缩软件,由 Igor Pavlov 开发。它具有高压缩比、支持多种格式、跨平台等特点。使用 C语言编写,其代码在 Github 上开源。 7-Zip的官网: 7-Zip 7-zip官方中文网站: 7-Zip 官方中文网站 7-Zip 的 G…...

oracle 12c DB卸载流程

1.运行卸载程序 [rootprimary1 ~]# su - oracle [oracleprimary1 ~]$ cd $ORACLE_HOME/deinstall [oracleprimary1 deinstall]$ ./deinstall Checking for required files and bootstrapping ... Please wait ... 这里选择3 、回车、y、y、回车、ASM 这里输入y 2.删除相关目录…...

Docker学习笔记 - 创建自己的image

目录 基本概念常用命令使用docker compose启动脚本创建自己的image 使用Docker是现在最为流行的软件发布方式, 本系列将阐述Docker的基本概念,常用命令,启动脚本和如何生产自己的docker image。 在我们发布软件时,往往需要把我…...

java web爬虫

目录 读取本地文件 从网站读取文件 java爬虫 总结 读取本地文件 import java.io.File; import java.io.PrintWriter; import java.util.Scanner;public class ReplaceText {public static void main() throws Exception{File file new File("basic\\test.txt"…...

MySQL开发教程和具体应用案例

一、MySQL开发教程 初识数据库 定义:数据仓库,安装在操作系统之上,用于存储和管理数据。 分类:关系型数据库(如MySQL、Oracle、SQL Server)和非关系型数据库(如Redis、MongoDB)。 SQL:结构化查询语言,用于管理和操作关系型数据库。 操作数据库 创建、修改、删除…...

QT C++ 模型视图结构 QTableView 简单例子

在Qt中,MVC模式被广泛使用于各种用户界面框架中,包括Qt的模型视图结构。Qt的模型视图结构是基于MVC模式设计的,其中包括了Model、View和Delegate三个部分。 QTableView是Qt模型视图结构中的一种视图,它用于以表格形式显示数据。 …...

2024年3月电子学会Python编程等级考试(四级)真题题库

2024年3月青少年软件编程Python等级考试(四级)真题试卷 题目总数:38 总分数:100 选择题 第 1 题 单选题 运行如下Python代码,若输入整数3,则最终输出的结果为?( &#xff…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 ​二、实现思路 总体思路: 用户通过Gradio界面上…...