Mysql启动之报错:The server quit without updating PID file

article/2025/8/29 12:57:45

一、问题描述

在这里插入图片描述

某次一线报某业务网站门户登录验证码获取失败;因该验证码是代码里通过验证码函数实现存入数据库,登录时再读取数据库里的验证码来实现包包里破解登录的;因此本次故障极大可能出现在数据库服务器故障。类似报错信息如下:

polkitd[551]: Registered Authentication Agent for unix-process:3986:1469369
……
Starting MySQL. ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid)

环境:Mysql 5.7.20

二、故障分析处理

1)登录数据库服务器master,发现mysqld进程确实挂掉了,但是重启mysqld时,报错:The server quit without updating PID file,mysql服务启动。

2)查看日志journalctl -xe里有类似报错:

在这里插入图片描述
上图中:该错误表示由于未注册unix进程的身份验证代理导致服务失败,并由polkitd服务报告。错误中的 polkitd 是一个系统守护进程,在系统消息总线上提供 D-Bus 服务。只要应用程序调用服务,dbus-daemon(1) 或 systemd(1) 就会自动启动它,用户或管理员是不需要启动这个守护进程的。只要将要启动的服务加入systemd管理,即自启动的程序加入到supervisor的启动配置中,启动时就会触发该守护进程,它的身份验证代理在程序启动之前验证用户的身份,比如本次案例中的,mysqld目录的属主身份;

3)检查/var/run/mysqld/mysqld.pid文件,发现/var/run/下竟然没有mysqld目录,正常不应该的,否则上次如何启动的呢?

先/var/run/下有mysqld目录,并赋予mysql属主/组权限,否则依然无法启动。完成后重新启动mysqld,这时启动成功。

4)关于/var/run/mysqld丢失的原因

相关经验表明这是mysql5.7的一个BUG,当你停止mysql服务时,/ var/run/mysqld会被删除,且/var/run/mysqld 目录每次重启后都需要手动去创建,是因为/var/run/目录下建立文件夹是在内存中,故每次重启后内存被清空导致/var/run/mysqld 也被清除,从而导致无法启动mysql。可尝试:

vim /etc/init.d/mysqld
将pid-file=/var/run/mysqld/mysqld.pid修改为 pid-file=/var/lib/mysqld/mysqld.pid
systemctl daemon-reload
chkconfig mysqld on
service mysqld start

三、附录

1)相关命令

mysqldump -u root -p --all-databases > /opt/mysql_db_bak/all_$(date +%F).sql
mysqladmin flush-hosts -h 172.31.71.11 -P 3306 -uroot -p
#添加mysql自启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
peeror 错误码

2) mysql.server,mysqld_safe和mysqld都是可以用来启动mysql服务,他们的区别:

1、 mysql.server是以脚本的方式来启动和关闭mysql服务;它主要会用到两个程序和一个函数,分别是my_print_defaults、myslqd_safe和parse_server_arguments;其中,my_print_defaults:读取my.cnf配置文件,输出参数传递给parse_server_arguments,该程序只读my.cnf中[mysqld]中的参数。parse_server_arguments函数处理my_print_defaults传递过来的参数赋值给–basedir、–datadir、–pid-file、–service-startup-timeout等;之后mysql.server接着调用mysqld_safe这个脚本,把parse_server_arguments解析到的参数值传递到mysqld_safe的参数列表中,启动MySQL服务器;这种方式只能使用默认的/etc/my.cnf配置文件来启动mysql;
2、mysqld_safe:它是调用mysqld程序来启动mysql服务的,my.cnf配置文件中的[mysqld_safe]部分中的参数会覆盖[mysqld]部分中的参数;mysqld进程挂掉的时候,mysqld_safe进程会监测到并重新将mysqld启动起来。即mysqld_safe可理解为是mysqld的守护进程,mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。因此,我们启动mysql服务时,会看到启动两个进程,一个是mysqld_safe、另外一个是mysqld的服务进程,其中mysqld_safe是守护进程,如果我们要kill掉mysqld进程,需要先kill掉守护进程。
3、mysqld:即执行/usr/local/mysql/bin/mysqld即可启动mysql服务;相关参数:–basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log
4、mysqld_multi:当运行多个MySQL服务器进程。mysql_multi可执行文件可以对每一个服务器进程的启动或停止进行监控

3)mysql的配置文件调用顺序

从高到低:my.cnf, $MYSQL_TCP_PORT,/etc/my.cnf,/etc/mysql/my.cnf,/usr/local/mysql/etc/my.cnf ,~/.my.cnf
mysqld_safe指定的–defaults-file指定的新文件会覆盖默认my.cnf中的配置
mysqld_safe指定的参数会覆盖my.cnf中的配置
mysqld直接启动使用参数,也会覆盖my.cnf中的配置

4)架构图
在这里插入图片描述
在这里插入图片描述

1、Server层:主要包括连接器、查询缓存(MySQL8.0移除)、分析器、优化器、执行器等,所有的跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图、函数等,还有一个通用的日志模块binglog
2、存储引擎:主要负责数据的存储和读取,采用可以替换的插件式架构,支持InnoDB、MyISAM、Memory等多个存储引擎,最常用的存储引擎是InnoDB,MySQL5.5.5版本开始其被做为默认的存储引擎。

更多参看MySQL的执行原理;

5)MySQL启动检查

#!/bin/bash
is_start_status=`ps -ef|grep -Ew 'mysqld|mysqld_safe' | grep -vw 'grep' |  wc -l`if [[ "$is_start_status" -ne 2 ]]; thensleep 10/opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/conf/my.cnf &
fi

http://chatgpt.dhexx.cn/article/gtc0DniL.shtml

相关文章

net start mysql启动常见问题

数据库安装常见问题 1、安装时net start mysql 后mysql启动失败。。服务无法启动。。服务没有报告任何错误 解决方法: 1)找到MySQL的安装目录,将data删除 (注意该文件下会有一些你自己建立的数据库的数据!) 2)搜索cmd以**管理员身份运行 **进入本机mysql…

Mysql启动选项和配置文件

Mysql启动选项和配置文件 Mysql启动方式 下面的启动命令都需要依赖在Linux环境下配置的Mysql环境变量 vi /etc/profile 在文件末尾加上Mysql的安装路径(演示中mysql配置在/usr/local/mysql-5.7.26下,这个路径需要根据自己的环境而定) expor…

如何启动MySQL服务

第一种 1.通过快捷键(WinR)输入 service.msc 调出服务窗口 2.找到MySQL服务,选择打开,或者自动打开即可 第二种 1.通过 cmd 窗口,以管理员身份打开,输入指令: net start mysql 即可 2.不区分…

MySQL数据库如何启动?

本篇文章主要跟大家介绍的是MySQL数据库如何启动,相信很多朋友都不清楚吧,对此,摩杜云小杜整理了一下并分享给大家做个参考,由于内容质量高,且简洁明了,感兴趣的朋友不妨来看看,记得要看完。 前…

模型的参数verbose用法详解

模型的参数verbose含义 verbose是日志显示,有三个参数可选择,分别为0,1和2。 当verbose0时,简单说就是不输出日志信息 ,进度条、loss、acc这些都不输出。当verbose1时,带进度条的输出日志信息,示例如下&am…

解决vue项目的 verbose stack Error: unable to resolve dependency tree问题

项目场景: 安装vue插件的时候出现报错 verbose stack Error: unable to resolve dependency tree 在命令后面加入 –legacy-peer-deps即可 该命令意为绕过版本差异,允许多版本共存安装 npm install iview --save --legacy-peer-deps当把命令加上后缀即…

keras 中fit 和 evaluate中参数 verbose 详解

1、在 fit 和 evaluate 中 都有 verbose 这个参数 fit 中的 verbose verbose:该参数的值控制日志显示的方式 verbose 0 不在标准输出流输出日志信息 verbose 1 输出进度条记录 verbose 2 每个epoch输出一行记录 注意: 默认为 1 verbose 1 …

【cmake】——verbose=1 看编译的具体配置

cmake cmake用如下命令编译,可以看具体的配置项 cmake .. make VERBOSE1 -j8

python django ORM null blank choices help_text verbose_name

null 是针对数据库而言,如果 nullTrue, 表示数据库的该字段可以为空。Default is False.blank 是针对表单的,如果 blankTrue,表示你的表单填写该字段的时候可以不填,Default is False.help_text:这个选项用于在表单中显…

Keras中verbose的作用

在 fit 和 evaluate 中 都有 verbose 这个参数,下面详细说一下 fit 中的 verbose verbose:日志显示 verbose 0 为不在标准输出流输出日志信息 verbose 1 为输出进度条记录 verbose 2 为每个epoch输出一行记录 注意: 默认为 1 verbose …

keras 中的 verbose 详解

在 fit 和 evaluate 中 都有 verbose 这个参数,下面详细说一下 fit 中的 verbose verbose:日志显示 verbose 0 为不在标准输出流输出日志信息 verbose 1 为输出进度条记录 verbose 2 为每个epoch输出一行记录 注意: 默认为 1 evaluate …

python中if verbose是啥意思呀讲解

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

Keras:ModelCheckpoint和model.fit的verbose有什么差异?

Keras:ModelCheckpoint和model.fit的verbose有什么差异? 1.软件环境⚙️2.问题描述🔍3.解决方法🐡3.1.只打开model.fit的verbose3.2.只打开ModelCheckpoint的verbose3.3.同时打开ModelCheckpoint和model.fit的verbose 4.结论🤔 ⚡…

keras 中的verbose详解

转载自https://www.jianshu.com/p/159a9ac413fa 在 fit 和 evaluate 中 都有 verbose 这个参数,下面详细说一下 fit 中的 verbose verbose:日志显示 verbose 0 为不在标准输出流输出日志信息 verbose 1 为输出进度条记录 verbose 2 为每个epoch输出…

力扣1002. 查找共用字符

题目 给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。 示例: 输入:words ["bella","…

杭电OJ 1002 题目解答

HDOJ 1002 AB Problem Ⅱ AC 代码&#xff1a; #include <iostream> #include <string> #include <algorithm> using namespace std;int x[1001],y[1001],res[1001];int main() {int n;cin>>n;for(int k1;k<n;k){//重点//不是第一组时要做两个操…

东秦oj 1002

题目描述 输入两个数A,B&#xff0c;输出AB的值。 输入描述 第一行是数据的组数N&#xff0c;从第二行开始是NN组由两个整数&#xff08;A和B&#xff09;构成的数据&#xff0c;AA和BB之间用空格隔开&#xff0c;每组输入单独占一行 输出描述 每组的两个整数&#xff08;…

PAT 1002 解析

一、题目详情 问题描述&#xff1a;写出这个数 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10100。 输出格式&…

题1000、1001、1002

第一次使用上交的online judge&#xff0c;都翻译成了中文的&#xff0c;也还不错。只是没有提示使用环境的&#xff0c;我写的程序在VS2010下编译正确&#xff0c;但提交竟然报错&#xff0c;后来限制了一些。 1000题就是计算两个整数的相加&#xff1b; 1001题是判断一个列…

1002 写出这个数

想好好写一下这个题&#xff0c;因为一开始写了一百多行都没有写正确… 如果不想看那么多直接拉到最后看代码&#xff0c;但是也许我的解题过程会对你有帮助。 之前的思路&#xff1a; 用除10取余循环计算得到一个sum也就是各个数字的和&#xff0c;然后把sum倒转回来在除10取…