运维实践|采集MySQL数据出现many connection errors

news2024/11/27 0:22:29

文章目录

  • 问题出现
  • 问题分析
    • 当前环境
    • 问题分析
  • 解决方案
    • 1 检查调度事件任务是否开启
    • 2 开启调度事件任务
    • 3 创建一张日志表
    • 4 创建函数存储过程
    • 5 创建事件定时器
    • 6 开启事件调度任务
    • 7 检查核实是否创建
  • 总结

问题出现

最近在做OGG结构化数据采集工作,在数据采集过程中,数据库总是出现连接错误,导致阻塞。并提示以下错误:

Host is blocked because of many connection errors;unblock with
‘mysqladmin flush-hosts’

这里手动的解决方法是去数据库执行脚本: FLUSH HOSTS;。执行完成刷新缓存后,我已经将数据库错误连接数调大了,但是还是没一会就出错。
在这里插入图片描述

问题分析

当前环境

测试机器: macOS , Kylin V10 SP1

MySQL版本: MySQL 8.0.31 CE, MySQL 8.0.29 CE

问题分析

在网上搜索到一段话:

If more than this many successive connection requests from a host are
interrupted without a successful connection, the server blocks that
host from further connections. You can unblock blocked hosts by
flushing the host cache. To do so, issue a FLUSH HOSTS statement or
execute a mysqladmin flush-hosts command. If a connection is
established successfully within fewer than max_connect_errors attempts
after a previous connection was interrupted, the error count for the
host is cleared to zero. However, once a host is blocked, flushing the
host cache is the only way to unblock it. The default is 100.

简单解释下就是:因为由于网络异常而中止数据库连接

MySQL客户端与数据库建立连接需要发起三次握手协议,正常情况下,这个时间非常短,但是一旦网络异常,网络超时等因素出现,就会导致这个握手协议无法完成,MySQL有个参数、 connect_timeout ,它是MySQL服务端进程mysqld等待连接建立完成的时间,单位为秒。如果超过connect_timeout时间范围内,仍然无法完成协议握手话,MySQL客户端会收到异常,异常消息类似于: Lost connection to MySQL server at ‘XXX’, system error: errno,该变量默认是10秒
在这里插入图片描述

看到这里,在网上搜索了下并结合提示信息,也有很多解决方案,例如在服务器中创建一个调度任务,定时刷新缓存错误数据,那就开始试试。

解决方案

1 检查调度事件任务是否开启

执行脚本命令查看调度是否开启

mysql> SHOW VARIABLES LIKE '%event%';

在这里插入图片描述

2 开启调度事件任务

上面说明我这服务器已经开启了事件任务,如果没有开启,业务需担心,则执行以下命令(OFF或者0或者DISABLED),可以使用下面的命令临时处理下:

SET GLOBAL event_scheduler = 1;

上面开启事件任务是临时的,如果服务器重新启动或者MySQL服务重新启动,没有开启的事件任务会被还原,此时需要在配置文件配置启动服务时启动调度事件。在 my.cnf 中的 [mysqld]部分添加如下内容,然后重启mysql服务

event_scheduler=ON

3 创建一张日志表

创建一张名称为 it_flush_hosts_log 的表,此步骤如果不需要可以省略,用来记录调度器执行的日志信息。

DROP TABLE IF EXISTS it_flush_hosts_log;

CREATE TABLE it_flush_hosts_log(
	id INT(10) NOT NULL AUTO_INCREMENT COMMENT '序号',
	proc_name VARCHAR(64)  NULL DEFAULT 'proce_flush_hosts' COMMENT '函数存储过程',
	event_name VARCHAR(64) NULL DEFAULT 'event_flush_hosts' COMMENT '事件调度器',
	create_by VARCHAR(64) NULL DEFAULT NULL COMMENT '日志记录人',
	create_time datetime NULL DEFAULT NULL COMMENT '日志记录时间',
	PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT '清理缓存日志表';

4 创建函数存储过程

此时需要创建一个函数,名称为 flush_hosts_proce 存储过程的方式来执行程序,也就是我们常说的执行器。

DROP PROCEDURE IF EXISTS proce_flush_hosts;

CREATE PROCEDURE proce_flush_hosts()
BEGIN
  FLUSH HOSTS;
  INSERT INTO it_flush_hosts_log VALUE (null, 'proce_flush_hosts', 'event_flush_hosts', 'root', NOW());
END

5 创建事件定时器

创建一个名称为 event_flush_hosts 事件定时器(不启动)。这个事件会从现在开始,每隔1个月执行一次,并调用一个名称为 flush_hosts_proce 的存储过程。

DROP EVENT IF EXISTS event_flush_hosts;

CREATE EVENT event_flush_hosts
	ON SCHEDULE EVERY 1 MONTH
	ON COMPLETION PRESERVE DISABLE
COMMENT '每个月1号清理主机缓存'
DO 
	CALL flush_hosts_proce();

6 开启事件调度任务

执行下面的命令,开启调度定时器。

ALTER EVENT event_flush_hosts ON COMPLETION PRESERVE ENABLE;

注意⚠️:此步骤可以同上面的步骤5合并,直接使用 ENABLE 开启也是可以的。

7 检查核实是否创建

核实创建的是否准确,可以执行下面的命令,也可以使用GUI图形界面化工具查看。

SHOW PROCEDURE STATUS WHERE NAME LIKE 'proce_flush_hosts';

SHOW EVENTS WHERE NAME LIKE 'event_flush_hosts';

在这里插入图片描述
在这里插入图片描述

总结

有问题不可怕,有问题不解决才可怕。对于中年人来说,学习新技能或知识并不晚。事实上,许多人都是在中年甚至老年时才找到自己真正热爱的事情并开始学习。我感觉学习给予我最大的快乐就是预防以后的老年痴呆症。


欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SIEM 解决方案的不同部署方式,如何选择SIEM 解决方案

安全信息和事件管理(SIEM)作为一种网络安全解决方案,是多种技术的融合,这些技术结合了包括安全信息管理和安全事件管理在内的流程。简单来说,SIEM 解决方案是一种重要的安全工具,它收集、存储和分析来自整个…

QT自带打包问题:无法定位程序输入点?metaobject@qsound

文章目录 无法定位程序输入点?metaobjectqsound……检查系统环境变量的配置:打包无须安装qt的文件 无法定位程序输入点?metaobjectqsound…… 在执行release打包程序后,相应的release文件夹下的exe文件,无法打开 如有错误欢迎指出 检查系…

Java架构师系统架构内部维度分析

目录 1 导语2.1 安全性维度概述2.2 流程安全性2.3 架构安全性2.4 安全维度总结3 伸缩性维度概述和场景思路3.1 无状态应用弹性伸缩3.2 阿里云Knative弹性伸缩3.3 有状态应用弹性伸缩3.4 伸缩性维度总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导语

轻量封装WebGPU渲染系统示例<51>- 视差贴图(Parallax Map)(源码)

视差纹理是一种片段着色阶段增强材质表面凹凸细节的技术。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/ParallaxTexTest.ts 当前示例运行效果: 此示例基于此渲染系统实现,当前示例TypeScript源码如…

Spring之容器:IOC(2)

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

Docker实战案例研究:深入行业应用与最佳实践

Docker作为一种轻量级、可移植、可扩展的容器化技术,在各行各业都得到了广泛应用。本文将通过深入实际案例,介绍Docker在不同行业的应用以及相应的最佳实践,提供更加丰富的示例代码,以帮助大家更全面地理解和运用Docker的强大功能…

C#浅拷贝和深拷贝数据

目录 一、浅拷贝 二、深拷贝 一、浅拷贝 就是把原来的数据,复制一份,但是2份数据是共享地址的,修改第一份数据或者修改第二份数据,都会一起改变,这可能不是我们程序中需要的场景。 下面我们演示一下,首…

使用Halcon实现模板匹配

图片: 代码: read_image (Image, C:/Users/14348/Desktop/mobanpipei.jpg) get_image_size (Image, Width, Height) dev_close_window() dev_open_window (0, 0, Width, Height, black, WindowHandle) dev_display (Image) draw_rectangle1 (WindowHandle, Row1, Column1, Ro…

TrustZone之其他设备及可信基础系统架构

一、其他设备 最后,我们将查看系统中的其他设备,如下图所示: 我们的示例TrustZone启用的系统包括一些尚未涵盖的设备,但我们需要这些设备来构建一个实际的系统。 • 一次性可编程存储器(OTP)或保险丝 这些是一旦写入就无法更改的存储器。与每个芯片上都包含相同…

CountDownLatch实战应用——实现异步多线程业务处理,异常情况回滚全部子线程

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: CountDownLatch实战应用——实现异步多线程业务处理,异常情…

单片机期末复习

前言 发现很多人都写了单片机原理及接口技术课后习题的答案,但是也就只写了答案而已,可能是他们觉得太简单的缘故吧,我这里对此进行一下我近段时间复习的总结,本篇博客只展示选择题、填空题和判断题的答案,仅供参考&a…

MFC 程序执行流程

目录 MFC 程序启动 MFC 入口函数 程序执行流程总结 在Win32课程中WinMain由程序员自己实现,那么流程是程序员安排,但到了MFC中,由于MFC库实现WinMain,也就意味着MFC负责安排程序的流程。 MFC 程序启动 程序的启动,…

【JAVA】CyclicBarrier源码解析以及示例

文章目录 前言CyclicBarrier源码解析以及示例主要成员变量核心方法 应用场景任务分解与合并应用示例 并行计算应用示例 游戏开发应用示例输出结果 数据加载应用示例 并发工具的协同应用示例 CyclicBarrier和CountDownLatch的区别循环性:计数器的变化:用途…

神经网络可以计算任何函数的可视化证明

神经网络可以计算任何函数的可视化证明 对于神经网络,一个显著的事实就是它可以计算任何函数。 如下:不管该函数如何,总有神经网络能够对任何可能的输入x,输出值f(x) 即使函数有很多输入和输出&#xff0…

【每日一题】【12.17】746.使用最小花费爬楼梯

🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.题目链接 746. 使用最小花费爬楼梯https://leetcode.cn/problems/min-cost-climbing-stairs/ 2.题目详情 今天的每日一题又…

leetcode每日一题打卡

leetcode每日一题 746.使用最小花费爬楼梯162.寻找峰值 从2023年12月17日开始打卡~持续更新 746.使用最小花费爬楼梯 2023/12/17 代码 解法一 class Solution {public int minCostClimbingStairs(int[] cost) {int n cost.length;int[] dp new int[n1];dp[0] 0;dp[1] 0;…

RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及批量发送消息、消息过滤实战

文章目录 批量发送消息消息过滤 批量发送消息 批量发送消息可以减少网络的 IO 开销,让多个消息通过 1 次网络开销就可以发送,提升数据发送的吞吐量 虽然批量发送消息可以减少网络 IO 开销,但是一次也不能发送太多消息 批量消息直接将多个消…

结构型设计模式(二)装饰器模式 适配器模式

装饰器模式 Decorator 1、什么是装饰器模式 装饰器模式允许通过将对象放入特殊的包装对象中来为原始对象添加新的行为。这种模式是一种结构型模式,因为它通过改变结构来改变被装饰对象的行为。它涉及到一组装饰器类,这些类用来包装具体组件。 2、为什…

将mjpg格式数转化成opencv Mat格式

该博客可以解决如下两个问题: 1、将mjpg格式数据转化成opencv Mat格式 2、v4l2_buffer 格式获取的mjpg格式数据转换成Mat格式。 要将 MJPEG 格式的数据转换为 OpenCV 的 Mat 格式,您可以使用 imdecode 函数。imdecode 函数可以将图像数据解码为 Mat 对象…

【MySQL】数据库和表的操作

数据库和表的操作 一、数据库的操作1. 创建数据库2. 字符集和校验规则(1)查看系统默认字符集以及校验规则(2)查看数据库支持的字符集(3)查看数据库支持的字符集校验规则(4)校验规则对…