16 Stimmen

Schwer zu beheben "Mysql-Server ist weg"

Ich betreibe eine MsAccess mit Mysql-Hintergrunddatenbank und heute habe ich einige Probleme.

Je nachdem, wie weit ich in das Programm eindringen kann, kann ich eine Liste mit allen Namen und Einträgen erhalten. Sobald ich jedoch das Bearbeitungsformular eines Eintrags aufrufe, erhalte ich eine Vielzahl von Ergebnissen. Manchmal habe ich Glück und ich kann den ersten Eintrag sehen. Aber bei jedem weiteren Eintrag wird immer ein MsAccess-Fehler angezeigt: Objekt ungültig oder nicht mehr gesetzt und alle weiteren Aufrufe danach führen zu einem Mysql-ODBC-Fehler von Der Mysql-Server ist verschwunden.

Ich habe mich auf mehreren Websites und sogar auf allen Stack Overflow-Sites mit der gleichen Frage umgesehen und eine Vielzahl von Lösungen ausprobiert. (Beachten Sie, dass diese Datenbank seit Jahren läuft und dies das erste Mal ist, dass ich diese Meldung erhalte) Es dauert auch etwa 2m14s bis 2m59s, bevor es irgendwelche Fehlermeldungen anzeigt.

Hier ist, was ich bisher ausprobiert habe:

  1. Ich habe versucht, einige der ODBC-Verbindungseinstellungen zu ändern.
    • Geprüft Erlaube große Ergebnisse - FAILED
    • Aktiviert Auto Reconnect aktivieren - FAILED
  2. Ich habe die Tabellen überprüft und repariert - FAILED
    • Eine große Anzahl von Tabellen führte zu der Meldung "Tabelle muss aktualisiert werden, bitte Tabelle reparieren".
  3. Ich habe die Zahlen in der my.cnf-Konfiguration verdoppelt und sowohl den mysql-Dienst als auch die msaccess-Software neu gestartet. FAILED
    • Dies waren die Einstellungen in meiner my.cnf, nachdem ich die Änderungen vorgenommen hatte.

Toma:

set-variable = max_connections=500
safe-show-database
log-error=/var/log/mysqld.log
connect_timeout=1000
interactive_timeout=28800
wait_timeout=288000          <**This was changed**

join_buffer_size=6M
key_buffer_size=300M         <**THIS WAS CHANGED **
max_allowed_packet=300M      <**THIS WAS CHANGED **
myisam_sort_buffer_size=300M <**THIS WAS CHANGED **
read_buffer_size=6M
sort_buffer_size=6M
table_cache=12288
thread_cache_size=24
tmp_table_size=132M
query_cache_limit=3M
query_cache_size=64M
query_cache_type=1

Im Grunde habe ich jeden Vorschlag ausprobiert, den ich bisher finden konnte, und ich kann das Problem nicht lösen.

Ich habe auch einen Blick geworfen auf MYSQL: Ist verschwunden Wenn ich mir die Aufzählung dort anschaue

  • Niemand hat den laufenden Thread beendet
  • Ich glaube nicht, dass die Abfrage ausgeführt wurde, nachdem die Verbindung geschlossen wurde (da sie jahrelang problemlos lief)
  • Die Client-Anwendung verfügt über die erforderlichen Berechtigungen
  • Ich weiß nicht, wie ich herausfinden kann, ob ich eine Zeitüberschreitung bei der TCP/IP-Verbindung auf der Client-Seite hatte
  • Ich weiß nicht, ob ich eine Zeitüberschreitung auf der Serverseite festgestellt habe, aber ich weiß, dass die automatische Wiederherstellung der Verbindung im Client deaktiviert ist.
  • ???
  • Die Abfrage könnte möglicherweise sehr umfangreich sein, da es sich um ein Formular mit vielen Unterformularen handelt
  • ???
  • DNS sollte in Ordnung sein, da ich mit einem echten Sql-Viewer (HeidiSQL) eine Verbindung herstellen kann.
  • "Kindergabeln
  • ???

Ich glaube, das ist einer dieser Fehler, die schwer zu finden sind, da ich erschöpft bin :/ Ich übersehe wahrscheinlich einige Informationen, aber ich bin mir nicht sicher, was ich noch hinzufügen könnte.

---EDIT---

Vielen Dank für Ihre Kommentare, ich bin noch dabei, dieses Problem zu beheben. Es scheint, dass nicht alle Formulare Probleme verursachen. Ich fange also an zu glauben, dass es sich eher um ein MSAccess-Problem als um ein MySql-Problem handelt. Die Formulare, die nicht funktionieren, haben alle die gleiche Zeile in ihrem VBA-Code:

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    If Screen.ActiveControl.Name = "UnboundTextBox" Then
       Response = acDataErrContinue
    End If
End Sub

Ich kann mich nicht daran erinnern, diesen Code eingegeben zu haben, also nehme ich an, dass es eine automatische Sache ist, aber ich gehe immer noch alle meine Formulare durch, um zu sehen, welche diesen Fehler verursachen und welche nicht. Also mehr in ein paar.

---Heute führe ich eine Fehlersuche durch und versuche, alles aus dem Protokoll herauszufinden, das ich auftreiben kann ----

 MSACCESS        17ec-b10   EXIT  SQLStatisticsW  with return code -1 (SQL_ERROR)
    HSTMT               0AF82920
    WCHAR *             0x00000000 [      -3] <empty string>
    SWORD                       -3 
    WCHAR *             0x00000000 [      -3] <empty string>
    SWORD                       -3 
    WCHAR *             0x0013AAE8 [      -3] "location\ 0"
    SWORD                       -3 
    UWORD                        1 <SQL_INDEX_ALL>
    UWORD                        0 <SQL_QUICK>

    DIAG [08S01] [MySQL][ODBC 3.51 Driver][mysqld-5.0.92-community]Lost   
 connection to MySQL server during query (2013) 

----------------------------- FINAL EDIT --------------------------

In der letzten Woche hat mein Chef hart daran gearbeitet, einen neuen internen Server für unser Büro zu installieren. Wir haben auch mehrmals die IPs und die ISP-Anbieter gewechselt. Wie sich herausstellte, hat er mir damit einen administrativen Albtraum beschert, da ich versuchte, Probleme mit dem Server und mit der Software zu beheben usw. usw., obwohl das Problem in den Einstellungen lag, die der ISP-Anbieter mit den Router-Einstellungen festgelegt hatte usw. usw. Im Grunde genommen lag dieses ganze Problem weder am Server noch an der Software, sondern an der Hardware dazwischen.

Jetzt muss ich also alles, was ich gemacht habe, rückgängig machen und versuchen, es auf beiden USB-Stationen zum Laufen zu bringen. Auf dem wichtigen funktioniert es jetzt. Aber auf dem alten funktioniert es nicht, also... Ich schätze, ich muss das einfach herausfinden. [Fuchtelt mit einer imaginären Faust in der Luft] Lol

2voto

Rob Sedgwick Punkte 4094

Das Problem besteht darin, dass die Verbindung zeitlich gestört ist. Dies ist keine Einstellung, die Sie auf ODBC-Ebene ändern können. Mein MySQL-Provider hatte die Zeitüberschreitung auf 30 Sekunden eingestellt (Sie können herausfinden, was bei Ihnen eingestellt ist, indem Sie die PassThrough-Abfrage "SELECT @@wait_timeout" ausführen). Ich habe das Problem umgangen, indem ich die Verbindung alle 10 Sekunden mit einem einfachen Formular abgefragt habe. Das hält die Verbindung aufrecht. Stellen Sie sicher, dass Sie ein AutoExec-Makro haben, das das Formular öffnet.

Private Sub Form_Open(Cancel As Integer)
    Me.TimerInterval = 1000 ' 10 seconds
End Sub

Private Sub Form_Timer()
    Me.Requery
End Sub

1voto

David-W-Fenton Punkte 22473

Ich habe MySQL nicht mit Access in einer Produktionsumgebung verwendet, aber das Problem, das Sie haben, klingt verdächtig ähnlich wie eines, das ich mit SQL Server erlebt habe. Wenn der Client-Arbeitsplatzrechner falsche DNS-Einstellungen hat, kann er verwirrt sein, wie er die Verbindung zum SQL-Server auflösen soll, und die Verbindung wird unterbrochen. In den Fällen, in denen ich das erlebt habe, waren die Workstations falsch konfiguriert, mit dem DNS des Internetanbieters als primärem DSN, aber der SQL-Server war ein lokaler Server, der nur im lokalen LAN verfügbar war (und nicht vom DNS des Internetanbieters zugeordnet wurde).

Die Lösung besteht darin, den lokalen Domänencontroller als primären DNS zu verwenden. Er sucht nach der IP-Adresse des lokalen SQL-Servers und leitet alle nicht-lokalen Suchanfragen an den DNS des Internet-Providers weiter.

Wenn Sie keinen Windows/Samba-Domänencontroller haben, müssen Sie den autorisierten Namensserver des lokalen LANs verwenden. Alternativ könnten Sie eine Verbindung zum MySQL-Server über die IP-Adresse herstellen und so das Problem vermeiden oder den Server in der HOSTS-Datei der Client-Workstation zuordnen (was nicht empfohlen wird - es ist ein guter Weg, um wirklich schwer zu behebende Probleme zu verursachen, wenn sich die IP-Adressen ändern).

0voto

borrel Punkte 910
[mysqld-5.0.92-community]Lost   
connection to MySQL server during query (2013) 

Dies bedeutet, dass Sie einen Fehler im MySQL-Server gefunden haben. können Sie einen Auszug aus Ihrer mysqld.err und mysqd.log posten

Dadurch wird der Server neu gestartet und alle offenen Verbindungen werden geschlossen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X