![Das Ausführen eines Remote-Befehls mit SSH scheint alle anderen Netzwerkaktivitäten zum Stillstand zu bringen](https://rvso.com/image/652656/Das%20Ausf%C3%BChren%20eines%20Remote-Befehls%20mit%20SSH%20scheint%20alle%20anderen%20Netzwerkaktivit%C3%A4ten%20zum%20Stillstand%20zu%20bringen.png)
Ich führe den folgenden Befehl aus, um eine MySQL-Datenbank von einem Remotecomputer zu sichern:
ssh [email protected] 'mysqldump mainserver' | gzip -c > mainserver.sql.gz
Ich habe die Zeit für den Befehl gemessen und es scheint, als würde er etwa 2,5 bis 3 Minuten dauern. Es scheint ohne Probleme zu funktionieren.
Das Problem besteht jedoch darin, dass der gesamte andere Netzwerkverkehr auf dem Remote-Server unterbrochen zu sein scheint.
Der Remote-Server verfügt über HTTP-Verbindungen im „Comet“-Stil (Verbindungen, die über einen längeren Zeitraum offen bleiben) und diese Verbindungen scheinen zu stoppen. Es gibt auch andere TCP-Verbindungen, die offen gehalten werden und die genau an dem Punkt getrennt zu werden scheinen, an dem der obige SSH-Befehl endet. (Zumindest erscheinen die Protokollmeldungen, wenn der SSH-Befehl endet, aber ich vermute, dass vorher keine Daten übertragen werden).
Antwort1
Die Datenbank ist gesperrt
Obwohl es in der Frage so beschrieben wird: „Der gesamte übrige Netzwerkverkehr auf dem Remote-Server scheint unterbrochen zu sein“, ist es viel wahrscheinlicher, dass der Datenbank-Dump (alle) InnoDB-Tabellen sperrt.
In diesem Szenario wartet jeder Prozess, der gesperrte Tabellen liest/schreibt, bis der Dump abgeschlossen ist, bevor er selbst eine Sperre erhalten, in der Datenbank lesen/schreiben und die Anfrage abschließen kann. Wenn der gesamte HTTP-Verkehr in der Datenbank lesen/schreiben muss, würde dies den Eindruck erwecken, dass der gesamte HTTP-Verkehr blockiert ist.
Sperren verhindern
Mysqldump bietet die--single-transactionFlag, das mysqldump erlaubt,nichtTabellen sperren innodb
.