MySQL连接hang住问题分析
Linux c多线程连接mysql数据库,每次都是短连接,操作完后就释放连接,有时候会出现mysql_real_connect挂住的现象,挂住超时mysql
【问题现象】:
1. Linux c多线程连接mysql数据库,每次都是短连接,操作完后就释放连接,有时候会出现mysql_real_connect挂住的现象
2. 挂住超时mysql_real_connect返回后报错如下:Lostconnection to MySQL server at 'reading initial communication packet', systemerror: 104,返错后线程号没变,会继续往下运行
【初步原因分析】:
1. mysql_real_connect连接数据库, 没有显式调用超时时间,重连什么的,,使用的默认值:
2. 昨天拿c mysqlclient的源码进行了分析测试,发现以下几个配置项的默认值(如果调mysql_real_connect之前没有设置任何属性,mysql client端的机器上/etc/my.cnf也没有配置)如下:
connect_timeout = 0
read_timeout = 0
write_timeout = 0
reconnect = 0 //1表示自动重连
所以这些参数是需要显式设置的。
{net = {vio = 0x7b8f150, options = {connect_timeout = 0, read_timeout = 0, write_timeout = 0,}
3. Mysqlclient中报错的代码如下(与服务端连接建立后,读解析包的时候失败了):
/*
Part 1: Connection established, read and parse first packet
*/
if ((pkt_length=cli_safe_read(mysql)) == packet_error)
{
if (mysql->net.last_errno == CR_SERVER_LOST)
set_mysql_extended_error(mysql, CR_SERVER_LOST, unknown_sqlstate,
ER(CR_SERVER_LOST_EXTENDED),
"reading initial communication packet",
errno);
fprintf(myfp,"%s after cli_safe_read packet_error \n",cur_time());
goto error;
}
线程阻塞时抓到的堆栈如下:
#0 0x0000003ebe0c5f3b in read () from /lib64/libc.so.6
#1 0x00007f240dd91430 in vio_read () from /usr/lib/libmysql.so.16.0.0
#2 0x00007f240dcf9b05 in my_real_read () from /usr/lib/libmysql.so.16.0.0
#3 0x00007f240dcf9e38 in my_net_read () from /usr/lib/libmysql.so.16.0.0
#4 0x00007f240dcec396 in cli_safe_read () from /usr/lib/libmysql.so.16.0.0
#5 0x00007f240dceea17 in mysql_real_connect () from /usr/lib/libmysql.so.16.0.0

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本章节为你们带来的文章是关于NavicatforMySQL软件的,你们晓得NavicatforMySQL如何连接本地MySQL数据库吗?接着,小编就为各位带来了NavicatforMySQL连接本地MySQL数据库的方法,感兴趣的用户一同来下文看看吧。进行打开电脑Navicatformysql已经安装好的,然后进行点击右上角的“连接”选项在弹出的新建连接窗口中,您可以输入连接名称,并将主机名设置为本地数据库,因此只需使用“localhost”,密码留空即可。然后方便连接的数据库是否连接成功的话,

使用Docker部署MySQL后,连接速度较慢,通过在线搜索发现问题可能源自最小容器安装时缺少DNS解析等模块。所以连接时会出现连接超慢的问题,我们直接加入这一句skip-name-resolve我们直接修改docker-compose.yml配置,配置如下version:"3"services:mysql:image:mysql:latestcontainer_name:mysql_composerestart:alwaysports:-3306:3306command:--default-a

MySQL连接数对数据库性能的影响分析随着互联网应用的不断发展,数据库成为了支撑应用系统重要的数据存储和管理工具。在数据库系统中,连接数是一个重要的概念,它直接关系到数据库系统的性能和稳定性。本文将从MySQL数据库的角度出发,探讨连接数对数据库性能的影响,并通过具体的代码示例进行分析。一、连接数是什么?连接数指的是数据库系统同时支持的客户端连接数,也可以理

如何在Python程序中优化MySQL连接的高并发性能?摘要:MySQL是一种性能强大的关系型数据库,但在高并发的情况下,对于Python程序的连接和查询操作可能会影响系统的性能。本文将介绍一些优化技巧,以提高Python程序与MySQL数据库的性能。使用连接池:在高并发的情况下,频繁地创建和关闭数据库连接会消耗大量的系统资源。因此,使用连接池可以有效地减少

如何在命令行中测试MySQL连接的高并发性能?随着互联网应用的不断普及,数据库的高并发性能成为了很多需求的关注点之一。而MySQL作为一个流行的开源数据库,其高并发性能也是被广泛关注的。在测试MySQL连接的高并发性能之前,我们需要先明确一些概念和准备工作:并发连接:指的是同时有多个客户端与数据库建立连接,并且这些连接同时进行数据库操作。连接数限制:MySQ

如何处理MySQL连接异常终止后的数据丢失?在使用MySQL数据库时,有时候由于各种原因,数据库连接会出现异常终止的情况,这不仅会导致当前操作被中断,还可能会导致已经提交的数据丢失。为了解决这个问题,我们需要采取一些措施来处理MySQL连接异常终止后的数据丢失。首先,我们需要明确一点:MySQL是一个具有事务支持的数据库,事务是一组操作的集合,要么全部提交,

MySQL连接被重置,如何处理?MySQL是一种常用的关系型数据库管理系统,广泛应用于各种不同规模的项目中。然而,在使用MySQL时,有时会遇到连接被重置的情况,这可能会给我们的项目带来一些麻烦。本文将介绍MySQL连接被重置的原因以及如何处理这个问题。连接被重置通常是由以下几种原因引起的:1.网络问题:当连接MySQL的客户端与服务器之间的网络连接不稳定、

MySQL连接被重置,如何通过连接保活来确保连接池的健康?在使用MySQL数据库时,经常会遇到连接被重置的情况,造成数据库连接中断,对于应用程序来说是非常不可靠的。为了解决这个问题,可以通过连接保活的方式来确保连接池的健康。连接保活是指在连接空闲状态下发送一个特定的查询语句来保持连接的活跃状态,防止连接被服务器主动关闭。这个特定的查询语句可以是一条简单的SE
