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

文章目录

  • 问题出现
  • 问题分析
    • 当前环境
    • 问题分析
  • 解决方案
    • 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()
BEGINFLUSH 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_hostsON SCHEDULE EVERY 1 MONTHON 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.hqwc.cn/news/284730.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【剪映】点滴剪时光

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

双指针算法(二)

三数之和 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重…

Go环境安装

目录 下载地址 安装 macos环境 window及其他环境 GOPROXY 非常重要 Go开发编辑器 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 选择要下载的系统版本: 安装 注意…

DataGrip 2023.3 新功能速递!

1 数据可视化 自 DataGrip 2023.3 发布以来,已整合 Lets-Plot 库,实现数据可视化。该可视化功能可用于所有三种类型的网格: 主选项卡:在打开表、视图或 CSV 文件时,在分割模式下显示图表。结果选项卡:在 服…

计算机组成原理(输入输出系统-----程序查询方式)

目录 程序查询方式 一.程序查询方式的流程 1.查询流程 2.程序流程 二.程序查询方式的接口电路 程序查询方式 一.程序查询方式的流程 1.查询流程 单个设备: 如果在传输过程当中只有一个内存和I/O之间数据传输,在执行程序的过程当中CPU会执行出来一…

setXxx getXxx 封装

1.封装介绍 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作[方法],才能对数据进行操作。 2.封装的理解和好处 (1)隐藏实现细节 方法(连接数据库)<-----调用(传入参数...) 只负责调…

代码随想录27期|Python|Day17|二叉树|110.平衡二叉树 |257. 二叉树的所有路径 |404.左叶子之和

110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 在递归后序遍历的基础上加上一个中间节点判断左右子节点的高度的步骤即可。 具体实现 是如果左右子树已经高度差大于1&#xff0c;则中间节点标记为-1&#xff0c;在逐层向上返回之后可以在root节点被判定为false&am…

力扣---最长回文子串(动态规划)

目录 ​编辑 题目 思路步骤&#xff1a; 代码 我的其他博客 题目 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&…

详解git pull和git fetch的区别

git pull和git fetch的区别, 网上人云亦云胡说八道的实在是太多了&#xff0c;误导我很久。 今天看到一个说得好的&#xff0c;记录一下。 前言 在我们使用git的时候用的更新代码是git fetch&#xff0c;git pull这两条指令。但是有没有小伙伴去思考过这两者的区别呢&#xff…

统计3个点在3维空间的分布

在4*4*4的立方体中&#xff0c;随机取3个点&#xff0c;有64*63*62/641664个结构&#xff0c; 21440 % 20224 % 1 1728 0.0415 17 1728 0.041475 2 1728 0.0415 18 1728 0.041475 3 576 0.0138 19 384 0.009217 4 576 0.0138 20 3456 0.082949 5 …

简述SD-WAN组网的五大技术优势

在信息时代&#xff0c;企业对网络的需求不再局限于简单的连接&#xff0c;而是追求更加高效、灵活和可靠的网络架构。SD-WAN&#xff08;软件定义广域网&#xff09;作为一项先进的组网技术&#xff0c;以其独特的优势成为企业网络升级的热门选择。本文将深入探讨SD-WAN的技术…

Ubuntu 虚拟机环境,编译AOSP源码

环境 : VMware虚拟机 Ubuntu 20.04.3 LTS 搭建配置开发环境 sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl…