Fehlercode: 2013. Verbindung zum MySQL-Server während der Abfrage unterbrochen

250

Ich habe den Fehlercode 2013 erhalten. Die Verbindung zum MySQL-Server wurde während eines Abfragefehlers unterbrochen, als ich versuchte, mit MySQL Workbench einen Index zu einer Tabelle hinzuzufügen. Mir ist auch aufgefallen, dass es immer dann angezeigt wird, wenn ich eine lange Abfrage durchführe.

Gibt es weg, um den Timeout-Wert zu erhöhen?

user836026
quelle

Antworten:

471

Neue Versionen von MySQL WorkBench bieten die Möglichkeit, bestimmte Zeitüberschreitungen zu ändern.

Für mich war es unter Bearbeiten → Einstellungen → SQL-Editor → Zeitüberschreitung beim Lesen der DBMS-Verbindung (in Sekunden): 600

Der Wert wurde auf 6000 geändert.

Außerdem wird das Deaktivieren von Grenzwertzeilen, da das Setzen eines Grenzwerts bei jeder Suche im gesamten Datensatz mühsam wird.

Eric William Nord
quelle
2
Ist es möglich, dieses Limit über 99.999 Sekunden zu erhöhen? Das DBMS connection read time outFeld akzeptiert nur bis zu 5 Ziffern, und das Setzen des Felds auf 0 entspricht dem Standardparameter (600 Sekunden). (Windows 7 64-Bit Ultimate, MySQL Workbench 5.2.47 CE)
Franck Dernoncourt
2
Nach stackoverflow.com/q/16877574/395857 ist dieses Problem nun behoben ( bugs.mysql.com/bug.php?id=69395 )
Franck Dernoncourt
4
Deaktivieren Sie die Option Grenzwertzeilen in Bearbeiten → Einstellungen → SQL-Abfragen
Jon
7
Nach dem Neustart wird Fehler 2013 erneut angezeigt, auch wenn das Lesezeitlimit auf 6000 eingestellt ist. Dies scheint also keine Lösung zu sein.
Davicus
4
Denken Sie daran, Workbench neu zu starten UND zuerst alle geöffneten Abfragefenster zu schließen!
Pimbrouwers
32

Starten Sie den DB-Server mit der Option comandline net_read_timeout/ wait_timeoutund einem geeigneten Wert (in Sekunden) - zum Beispiel : --net_read_timeout=100.

Referenz siehe hier und hier .

Yahia
quelle
1
Das ist richtig, aber die Antwort mit den meisten Ups hat mir tatsächlich geholfen
Sambit Tripathy
6
Wie stelle ich diesen Parameter in der Befehlszeile bereit? Wenn ich versuche, eine Verbindung zur Datenbank herzustellen: mysql -u root -p --net_read_timeout = 60 oder wenn ich versuche, den Dienst zu starten? Sudo Service MySQL starten? An beiden Stellen gibt es einen Fehler: unbekannte Variable 'net_read_timeout'
Vikas Goel
@VikasGoel Dies ist ein serverseitiger Parameter. Dh mysqld.
Chloe
29

Wenn Ihre Abfrage Blob-Daten enthält, kann dieses Problem behoben werden, indem eine in dieser Antwort vorgeschlagenemy.ini Änderung angewendet wird :

[mysqld]
max_allowed_packet=16M

Standardmäßig ist dies 1 MB (der zulässige Maximalwert beträgt 1024 MB). Wenn der angegebene Wert kein Vielfaches von 1024 KB ist, wird er automatisch auf das nächste Vielfache von 1024 KB gerundet.

Während der referenzierten Thread zu dem MySQL Fehler ist 2006 , die Einstellung max_allowed_packetvon 1M bis 16M hat fix die 2013 Fehler, der für mich auftaucht , wenn eine lange Abfrage ausgeführt wird .

Für WAMP-Benutzer: Die Flagge finden Sie im [wampmysqld]Abschnitt.

Harti
quelle
Das war genau mein Problem. Ich habe eine Datenbanksicherung aus einer Datei importiert und MySQL Workbench hat diesen Fehler von 2013 gemeldet, gefolgt von "Vorgang mit Exitcode 1 fehlgeschlagen". Es stellte sich heraus, dass das Backup große Blob-Spalten hatte, die die Standardgröße von MySQL für max_allowed_packet von 4 MB überschreiten. Durch Erhöhen dieses Problems wurde das Problem behoben. (MySQL 5.6 und Workbench 6.2.3). Vielen Dank!
ZAlbee
Dies war auch für mich das Problem. Obwohl ich es für einen Windows-Computer auf 256 MB eingestellt habe.
smoore4
Hatte 16M, bekam diesen Fehler mit einer Importdatei mehrmals, änderte sich zu 32M und es funktionierte dann.
hakre
15

Fügen Sie Folgendes in die Datei / etc / mysql / cnf ein:

innodb_buffer_pool_size = 64M

Beispiel:

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
innodb_buffer_pool_size = 64M
MysqlMan
quelle
6
Sind Sie sicher, dass der Dateiname /etc/mysql/cnfkorrekt ist? Sollte es nicht sein /etc/my.cnf?
Peter VARGA
12
SET @@local.net_read_timeout=360;

Warnung: Folgendes funktioniert nicht, wenn Sie es in einer Remoteverbindung anwenden:

SET @@global.net_read_timeout=360;
user1313024
quelle
Was ist 360? Millisekunde, Sekunden, Minuten?
MasterJoe2
10

Es gibt drei mögliche Ursachen für diese Fehlermeldung

  1. Normalerweise weist dies auf Probleme mit der Netzwerkverbindung hin, und Sie sollten den Zustand Ihres Netzwerks überprüfen, wenn dieser Fehler häufig auftritt
  2. Manchmal tritt das Formular "Während der Abfrage" auf, wenn Millionen von Zeilen als Teil einer oder mehrerer Abfragen gesendet werden.
  3. Seltener kann es vorkommen, dass der Client versucht, die erste Verbindung zum Server herzustellen

Für mehr Details lesen Sie >>

Ursache 2:

SET GLOBAL interactive_timeout=60;

von der Standardeinstellung von 30 Sekunden bis 60 Sekunden oder länger

Ursache 3:

SET GLOBAL connect_timeout=60;
Nanhe Kumar
quelle
2 gibt mir diesen Fehler - Code: 1227. Zugriff verweigert; Sie benötigen (mindestens eines) der SUPER-Berechtigung (en) für diese Operation
MasterJoe2
9

Danke! Es hat funktioniert. Aber mit den mysqldb-Updates wurde die Konfiguration zu:

max_allowed_packet

net_write_timeout

net_read_timeout

MySQL Doc

user2286136
quelle
8

Sie sollten die Eigenschaften 'interactive_timeout' und 'wait_timeout' in der MySQL-Konfigurationsdatei auf die gewünschten Werte setzen.

Maksym Polshcha
quelle
Das hilft mir. 'active_timeout 'in my.cnf wurde auf 100 gesetzt, das ist zu kurz. Nachdem ich es auf 3600 s geändert hatte (oder einen Wert, der groß genug für Sie war), wurde das Problem behoben.
Danke
7

Führen Sie einfach ein MySQL-Upgrade durch, bei dem die innoDB-Engine neu erstellt wird und viele Tabellen neu erstellt werden, die für das ordnungsgemäße Funktionieren von MySQL erforderlich sind, z performance_schema .information_schema etc.

Geben Sie den folgenden Befehl in Ihrer Shell ein:

sudo mysql_upgrade -u root -p
Shoaib Khan
quelle
Der Fehler trat erst in MySQL Workbench 6.1.4 (und erst nach einer Weile) auf und tritt auch in 6.1.6 auf (allerdings erst nach wenigen Anwendungen). Daher bin ich mir nicht sicher, wie das Wiederherstellen mehrerer Server behoben werden kann Ein Problem, das sich erst kürzlich auf einer GUI gezeigt hat.
Davicus
Dies hat mein Problem behoben. Ich hatte gerade Ansible verwendet, um die Datenbank über eine vorhandene einzurichten, und die Dinge gingen durcheinander. Durch Ausführen dieses Befehls wurde alles wieder funktionsfähig.
Jubz
4

Ich weiß, es ist alt, aber auf Mac

1. Control-click your connection and choose Connection Properties.
2. Under Advanced tab, set the Socket Timeout (sec) to a larger value.
Aamir Mahmood
quelle
4

Ändern Sie die Lesezeit in Bearbeiten-> Einstellungen-> SQL-Editor-> MySQL-Sitzung

user6234739
quelle
3

Deaktivieren Sie bitte die Option Grenzwertzeilen in Bearbeiten → Einstellungen → SQL-Abfragen

weil Sie die Eigenschaften 'interactive_timeout' und 'wait_timeout' in der MySQL-Konfigurationsdatei auf die gewünschten Werte setzen sollten.

user2586714
quelle
3

Wenn dieses Problem während der Wiederherstellung einer großen Dump-Datei auftritt und Sie das Problem ausschließen können, dass es irgendetwas mit dem Netzwerk zu tun hat (z. B. Ausführung auf localhost), kann meine Lösung hilfreich sein.

Mein mysqldump enthielt mindestens ein INSERT, das zu groß war, als dass mysql es hätte berechnen können. Sie können diese Variable anzeigen, indem Sie sie show variables like "net_buffer_length";in Ihre mysql-cli eingeben . Sie haben drei Möglichkeiten:

  • Erhöhen Sie net_buffer_length in MySQL -> dies würde einen Neustart des Servers erfordern
  • Dump erstellen mit --skip-extended-insert , pro Einfügung wird eine Zeile verwendet -> obwohl diese Dumps viel besser zu lesen sind, ist dies nicht für große Dumps> 1 GB geeignet, da sie in der Regel sehr langsam sind
  • Erstellen Sie einen Speicherauszug mit erweiterten Einfügungen (dies ist die Standardeinstellung), aber begrenzen Sie die Netzpufferlänge, z. B. --net-buffer_length NR_OF_BYTESwenn NR_OF_BYTES kleiner als die Netzpufferlänge des Servers ist -> Ich denke, dies ist die beste Lösung, obwohl langsamer kein Neustart des Servers erforderlich ist.

Ich habe den folgenden Befehl mysqldump verwendet: mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile

Matt V.
quelle
2

Ich habe das gleiche Problem beim Laden einer CSV-Datei. Konvertierte die Datei in .sql.

Mit dem folgenden Befehl kann ich dieses Problem umgehen.

mysql -u <user> -p -D <DB name> < file.sql

Hoffe das würde helfen.

Vinod Amarathunga
quelle
2

Wenn alle anderen Lösungen hier fehlschlagen, überprüfen Sie Ihr Syslog (/ var / log / syslog oder ähnliches), um festzustellen, ob Ihrem Server während der Abfrage der Arbeitsspeicher ausgeht.

Hatte dieses Problem, als innodb_buffer_pool_size zu nahe am physischen Speicher festgelegt wurde, ohne dass eine Auslagerungsdatei konfiguriert war. MySQL empfiehlt für einen datenbankspezifischen Server die Einstellung innodb_buffer_pool_size auf maximal etwa 80% des physischen Speichers . Ich hatte sie auf etwa 90% eingestellt. Der Kernel hat den MySQL-Prozess beendet. Innodb_buffer_pool_size wurde wieder auf ca. 80% verschoben, wodurch das Problem behoben wurde.

A_funs
quelle
2

In meinem Fall hat es nicht funktioniert, das Verbindungszeitlimit auf 6000 oder höher einzustellen.

Ich habe gerade getan, was die Werkbank sagt, dass ich tun kann.

Die maximale Zeit, die die Abfrage benötigen kann, um Daten aus dem DBMS.Set 0 zurückzugeben, um das Lesezeitlimit zu überspringen.

In den Mac-Einstellungen -> SQL-Editor -> Gehen Sie zu MySQL-Sitzung -> setzen Sie das Zeitlimit für das Lesen der Verbindung auf 0.

Und es funktioniert 😄

Thet Htun
quelle
1

Ich stand vor dem gleichen Problem. Ich glaube, es passiert, wenn Sie Fremdschlüssel für größere Tabellen haben (was Zeit braucht).

Ich habe versucht, die Anweisung create table erneut ohne die Fremdschlüsseldeklarationen auszuführen, und festgestellt, dass sie funktioniert.

Nachdem ich die Tabelle erstellt hatte, fügte ich die Fremdschlüsseleinschränkungen mit der Abfrage ALTER TABLE hinzu.

Hoffe das wird jemandem helfen.

Nimeshka Srimal
quelle
1

Dies ist mir passiert, weil meine innodb_buffer_pool_size größer als die auf dem Server verfügbare RAM-Größe eingestellt war. Die Dinge wurden dadurch unterbrochen und es tritt dieser Fehler auf. Das Update besteht darin, my.cnf mit der richtigen Einstellung für innodb_buffer_pool_size zu aktualisieren.

Phyllis Sutherland
quelle
1

Gehen Sie zu Workbench Edit → Einstellungen → SQL Editor → Lesezeitlimit für DBMS-Verbindungen: Bis zu 3000. Der Fehler ist nicht mehr aufgetreten.

Kairat Koibagarov
quelle
0

Gehe zu:

Bearbeiten -> Einstellungen -> SQL-Editor

Dort sehen Sie drei Felder in der Gruppe "MySQL Session", in denen Sie jetzt die neuen Verbindungsintervalle (in Sekunden) festlegen können.

Max
quelle
0

Es stellte sich heraus, dass unsere Firewall-Regel meine Verbindung zu MYSQL blockiert hat. Nachdem die Firewall-Richtlinie aufgehoben wurde, um die Verbindung zuzulassen, konnte ich das Schema erfolgreich importieren.

wuro
quelle
0

Ich hatte das gleiche Problem - aber für mich war die Lösung ein DB-Benutzer mit zu strengen Berechtigungen. Ich musste die ExecuteFähigkeit auf dem mysqlTisch zulassen . Nachdem ich das zugelassen hatte, hatte ich keine Verbindungsabbrüche mehr

Naabster
quelle
0

Überprüfen Sie zuerst, ob die Indizes vorhanden sind.

SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '<schema>'
Gayan Dasanayake
quelle
0

Ich bin darauf gestoßen, als ich einen gespeicherten Prozess ausgeführt habe, der viele Zeilen in einer Tabelle in der Datenbank erstellt hat. Ich konnte sehen, dass der Fehler direkt nach dem Überschreiten der 30-Sekunden-Grenze auftrat.

Ich habe alle Vorschläge in den anderen Antworten ausprobiert. Ich bin mir jedoch sicher, dass einiges davon geholfen hat. Was für mich wirklich funktioniert hat, war der Wechsel von Workbench zu SequelPro.

Ich vermute, es war eine clientseitige Verbindung, die ich in Workbench nicht erkennen konnte. Vielleicht hilft das auch jemand anderem?

RN.
quelle
0

Wenn Sie SQL Work Bench verwenden, können Sie versuchen, die Indexierung zu verwenden, indem Sie Ihren Tabellen einen Index hinzufügen. Um einen Index hinzuzufügen, klicken Sie auf das Schraubenschlüsselsymbol in der Tabelle. Das Setup für die folgende Tabelle sollte geöffnet werden Klicken Sie auf die Indexansicht, geben Sie einen Indexnamen ein und setzen Sie den Typ auf index. Wählen Sie in den Indexspalten die primäre Spalte in Ihrer Tabelle aus.

Führen Sie den gleichen Schritt für andere Primärschlüssel in anderen Tabellen aus.

Matthew E.
quelle
0

Hier scheint eine Antwort für diejenigen zu fehlen, die SSH verwenden, um eine Verbindung zu ihrer MySQL-Datenbank herzustellen. Sie müssen zwei Stellen überprüfen, nicht 1, wie in anderen Antworten vorgeschlagen:

Workbench-Bearbeitung → Einstellungen → SQL-Editor → DBMS

Workbench-Bearbeitung → Einstellungen → SSH → Zeitüberschreitungen

Meine Standard-SSH-Zeitüberschreitungen waren sehr niedrig eingestellt und verursachten einige (aber anscheinend nicht alle) meiner Zeitüberschreitungsprobleme. Vergessen Sie danach nicht, MySQL Workbench neu zu starten!

Zuletzt kann es sich lohnen, Ihren DB-Administrator zu kontaktieren und ihn zu bitten, die Eigenschaften wait_timeout und interaktives_timeout in mysql selbst über my.conf + mysql restart zu erhöhen oder einen globalen Satz durchzuführen, wenn ein Neustart von mysql keine Option ist.

Hoffe das hilft!

ThatOneGuy
quelle
0

Drei Dinge zu beachten und sicherzustellen:

  1. Ob mehrere Abfragen einen Verbindungsverlust anzeigen?
  2. Wie verwenden Sie Set Query in MySQL?
  3. Wie kann ich die Abfrage gleichzeitig löschen + aktualisieren?

Antworten:

  1. Versuchen Sie immer, den Definierer zu entfernen, da MySQL einen eigenen Definierer erstellt. Wenn mehrere Tabellen für die Aktualisierung erforderlich sind, versuchen Sie, eine einzelne Abfrage durchzuführen, da manchmal mehrere Abfragen einen Verbindungsverlust anzeigen
  2. SET-Wert immer oben, aber nach DELETE, wenn der Zustand keinen SET-Wert beinhaltet.
  3. Verwenden Sie DELETE FIRST THEN UPDATE, wenn beide Operationen auf verschiedenen Tabellen ausgeführt werden
Koyel Sharma
quelle
-1

Überprüfen Sie über

OOM on /var/log/messages ,
modify innodb_buffer_pool_size value ; when load data , use 50% of os mem ; 

Hoffe das hilft

Dyson L.
quelle
-1

Dies bedeutet normalerweise, dass Sie "Inkompatibilitäten mit der aktuellen Version von MySQL Server" haben, siehe mysql_upgrade. Ich bin auf dasselbe Problem gestoßen und musste einfach Folgendes ausführen:

mysql_upgrade --password In der Dokumentation heißt es, dass "mysql_upgrade jedes Mal ausgeführt werden sollte, wenn Sie MySQL aktualisieren".

SanthoshSally
quelle