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

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Der Artikel in diesem Kapitel befasst sich mit der NavicatforMySQL-Software. Wissen Sie, wie NavicatforMySQL eine Verbindung zur lokalen MySQL-Datenbank herstellt? Schau mal. Öffnen Sie den Computer, auf dem Navicatformysql installiert wurde, und klicken Sie dann auf die Option „Verbinden“ in der oberen rechten Ecke. Im Popup-Fenster für neue Verbindungen können Sie den Verbindungsnamen eingeben und den Hostnamen auf die lokale Datenbank festlegen Verwenden Sie „localhost“. Lassen Sie das Passwort einfach leer. Wenn dann die Verbindung zur praktischen Datenbank erfolgreich ist,

Nachdem ich Docker zum Bereitstellen von MySQL verwendet habe, ist die Verbindungsgeschwindigkeit langsam. Durch Online-Suchen habe ich herausgefunden, dass das Problem möglicherweise durch das Fehlen von Modulen wie der DNS-Auflösung während der minimalen Containerinstallation verursacht wird. Daher tritt beim Herstellen einer Verbindung ein Problem mit einer sehr langsamen Verbindung auf. Wir fügen diesen Satz „skip-name-resolve“ direkt hinzu und ändern die Konfiguration von „docker-compose.yml“ wie folgt: Version: „3“ -Dienste: mysql: image : mysql: Latestcontainer_name: mysql_composerestart: Alwaysports:-3306:3306command:--default-a

Analyse des Einflusses der MySQL-Verbindungsnummer auf die Datenbankleistung Mit der kontinuierlichen Entwicklung von Internetanwendungen sind Datenbanken zu einem wichtigen Datenspeicher- und Verwaltungstool zur Unterstützung von Anwendungssystemen geworden. Im Datenbanksystem ist die Anzahl der Verbindungen ein wichtiges Konzept, das in direktem Zusammenhang mit der Leistung und Stabilität des Datenbanksystems steht. Dieser Artikel beginnt aus der Perspektive der MySQL-Datenbank, untersucht die Auswirkungen der Anzahl von Verbindungen auf die Datenbankleistung und analysiert sie anhand spezifischer Codebeispiele. 1. Wie viele Verbindungen gibt es? Die Anzahl der Verbindungen bezieht sich auf die Anzahl der Client-Verbindungen, die das Datenbanksystem gleichzeitig unterstützt. Es kann auch verwaltet werden

Wie kann die hohe Parallelitätsleistung von MySQL-Verbindungen in einem Python-Programm optimiert werden? Zusammenfassung: MySQL ist eine relationale Datenbank mit hoher Leistung. Bei hoher Parallelität können jedoch die Verbindungs- und Abfragevorgänge von Python-Programmen die Leistung des Systems beeinträchtigen. In diesem Artikel werden einige Optimierungstechniken vorgestellt, um die Leistung von Python-Programmen und MySQL-Datenbanken zu verbessern. Verbindungspool verwenden: In Situationen mit hoher Parallelität verbraucht das häufige Erstellen und Schließen von Datenbankverbindungen viele Systemressourcen. Daher kann die Verwendung von Verbindungspooling effektiv reduziert werden

Wie teste ich die hohe Parallelitätsleistung von MySQL-Verbindungen über die Befehlszeile? Mit der kontinuierlichen Popularisierung von Internetanwendungen ist die hohe Parallelitätsleistung von Datenbanken zu einem Schwerpunkt vieler Anforderungen geworden. Als beliebte Open-Source-Datenbank hat MySQL auch aufgrund seiner hohen Parallelitätsleistung große Aufmerksamkeit erhalten. Bevor wir die hohe Parallelitätsleistung von MySQL-Verbindungen testen, müssen wir einige Konzepte und Vorbereitungen klären: Gleichzeitige Verbindungen: bezieht sich darauf, dass mehrere Clients gleichzeitig Verbindungen mit der Datenbank herstellen und diese Verbindungen gleichzeitig Datenbankoperationen ausführen. Verbindungslimit: MySQ

Wie gehe ich mit Datenverlust um, nachdem die MySQL-Verbindung abnormal beendet wurde? Bei Verwendung der MySQL-Datenbank kommt es manchmal aus verschiedenen Gründen zu einem abnormalen Abbruch der Datenbankverbindung. Dies führt nicht nur zu einer Unterbrechung des aktuellen Vorgangs, sondern kann auch zum Verlust der übermittelten Daten führen. Um dieses Problem zu lösen, müssen wir einige Maßnahmen ergreifen, um den Datenverlust zu bewältigen, nachdem die MySQL-Verbindung abnormal beendet wurde. Zunächst müssen wir klarstellen: MySQL ist eine Datenbank mit Transaktionsunterstützung. Eine Transaktion ist eine Reihe von Vorgängen, die entweder alle übermittelt werden.

Die MySQL-Verbindung wurde zurückgesetzt. Wie gehe ich damit um? MySQL ist ein häufig verwendetes relationales Datenbankverwaltungssystem, das häufig in Projekten unterschiedlicher Größe eingesetzt wird. Bei der Verwendung von MySQL kommt es jedoch manchmal vor, dass die Verbindung zurückgesetzt wird, was zu Problemen für unser Projekt führen kann. In diesem Artikel erfahren Sie, warum die MySQL-Verbindung zurückgesetzt wird und wie Sie mit diesem Problem umgehen können. Das Zurücksetzen der Verbindung wird normalerweise durch folgende Gründe verursacht: 1. Netzwerkproblem: Wenn die Netzwerkverbindung zwischen dem Client und dem mit MySQL verbundenen Server instabil ist,

Die MySQL-Verbindung wird zurückgesetzt. Wie kann der Zustand des Verbindungspools durch Verbindungs-Keep-Alive sichergestellt werden? Bei der Verwendung der MySQL-Datenbank kommt es häufig zu Situationen, in denen die Verbindung zurückgesetzt wird, was zu einer Unterbrechung der Datenbankverbindung führt, was für die Anwendung sehr unzuverlässig ist. Um dieses Problem zu lösen, können Sie den Zustand des Verbindungspools sicherstellen, indem Sie die Verbindung am Leben halten. Unter Verbindungs-Keep-Alive versteht man das Senden einer bestimmten Abfrageanweisung, wenn die Verbindung inaktiv ist, um die Verbindung aktiv zu halten und zu verhindern, dass die Verbindung vom Server aktiv geschlossen wird. Diese spezifische Abfrageanweisung kann eine einfache SE sein
