[MySQL] Verbindungsfehler [BITTE korrekt lesen]

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Abend!


    Ich werde langsam verrückt und bin der Meinung, dass
    hier irgend etwas mit den MySQL Plugins nicht stimmt.



    Installation von MySQL


    - MySQL in den Server eingebunden
    - blankes Script wird verwendet
    - mysql_connect() Funktion bei OnGameModeInit() eingefügt
    - mysql_ping() Abfrage, ob die Verbindung aktiv ist


    stock MySQL_Build(host[], user[], pw[], db[])
    {
    MySQL_Handle = mysql_connect(host, user, db, pw);
    }


    public OnGameModeInit()
    {
    print("[MySQL] Die Verbindung zur Datenbank wird hergestellt...\n");


    MySQL_Build(MySQL_Host, MySQL_User, MySQL_Pw, MySQL_Db);
    mysql_debug(true);


    if(mysql_ping(MySQL_Handle)) print("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt.\n");
    else
    {
    print("[MySQL] Beim Verbinden zur Datenbank ist ein Problem aufgetreten.");
    print("[MySQL] Es wird versucht sich erneut zur Datenbank zu verbinden.\n");


    MySQL_Build(MySQL_Host, MySQL_User, MySQL_Pw, MySQL_Db);


    if(mysql_ping(MySQL_Handle)) print("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt.\n");
    else
    {
    print("[MySQL] Eine Verbindung zur Datenbank ist nicht möglich.\n");
    mysql_close(MySQL_Handle);
    }
    }


    return 1;
    }
    Sind alle Variablen MySQL_Host, ..._User usw. deklariert und stimmen
    mit den Zugangsdaten überein, die über MySQL erstellt wurden, liefert
    die MySQL-Log Datei einen erfolgreichen Verbindungsaufbau.


    Code
    [23:12:32] >> mysql_connect(127.0.0.1, server_gta, server_gta, ******) on port 3306
    [23:12:32] CMySQLHandler::CMySQLHandler() - constructor called.
    [23:12:32] CMySQLHandler::CMySQLHandler() - Connecting to "127.0.0.1" | DB: "server_gta" | Username: "server_gta"
    [23:12:32] CMySQLHandler::Connect() - Connection was successful.
    [23:12:32] CMySQLHandler::Connect() - Auto-Reconnect has been enabled.
    [23:12:32]  
    [23:12:32]  ** MySQL Debugging enabled (09/23/12)
    [23:12:32]  
    [23:12:32] >> mysql_ping( Connection handle: 1 )
    [23:12:32] CMySQLHandler::Ping() - Connection is still alive.


    Saputiere ich jetzt die deklarierten Variablen und ändere den
    MySQL User beispielsweise von server_gta zu server_gta2,
    liefert mir die Log, dass eine Verbindung nicht möglich ist.


    Code
    [23:16:02] >> mysql_connect(127.0.0.1, server_gta2, server_gta, ******) on port 3306
    [23:16:02] CMySQLHandler::CMySQLHandler() - constructor called.
    [23:16:02] CMySQLHandler::CMySQLHandler() - Connecting to "127.0.0.1" | DB: "server_gta" | Username: "server_gta2"
    [23:16:02] CMySQLHandler::Connect() - Access denied for user 'server_gta2'@'localhost' (using password: YES) (Error ID: 1045)
    [23:16:02]  
    [23:16:02]  ** MySQL Debugging enabled (09/23/12)
    [23:16:02]  
    [23:16:02] >> mysql_ping( Connection handle: 1 )
    [23:16:02] CMySQLHandler::Ping() - You cannot call this function now. (Reason: Dead Connection)


    Doch weiterhin besteht das Problem, dass die Server-Log Einträge
    immernoch anzeigen, dass eine Verbindung erfolgreich hergestellt wurde.


    Die Funktionen dazu findet ihr ja oben...



    D.h. im Klartext, dass die Funktion mysql_ping() nicht korrekt arbeitet.


    Saputiere ich die Funktion und ändere die Anweisung von


    if(mysql_ping(MySQL_Handle))
    zu


    if(!mysql_ping(MySQL_Handle))
    ... kann niemals eine Verbindung hergestellt werden.
    Egal ob die Verbindungsdeklarationen, also Host, Name usw. korrekt sind.



    Wo liegt also nun das Problem?


    Ich komme an dieser Stelle nicht weiter.



    Noch einen Hinweis dazu möchte ich allerdings geben:


    GENAU der selbe Fehler tritt bei dem Plugin von BlueG auf, als
    auch bei dem Plugin von StrikenKid, was darauf deutet, dass
    bei beiden die Funktion mysql_ping() nicht korrekt arbeitet
    oder ich einen Fehler tätige.


    Ich bitte dringlichst um Hilfe!
    Egal ob Foren-Administrator, User usw...


    TeamViewer, Teamspeak, ICQ, usw. ist vorhanden zu besseren Kommunikation. :wacko:

  • Das ist richtig Maddin.
    Eigentlich ist bis zu dem Punkt, ohne Manipulationen, alles richtig.


    Nochmal für Dich:


    - manipuliere ich den Host, ist keine MySQL Verbindung möglich
    - starte ich den Server, schreibt er Server-Log und MySQL-Log


    > die MySQL-Log gibt mir nun preis, dass KEINE Verbindung zur Datenbank möglich ist


    WEIL ich den Host ja manipuliert habe


    DOCH die Funktion MYSQL_PING() buggt an dieser Stelle herum!


    Normaler weise, müsste sie, wenn KEINE Verbindung zur Datenbank besteht,
    den Wert false returnen. Genau das findest Du auch in der Wiki Beschreibung.


    Link: http://wiki.sa-mp.com/wiki/MySQL#mysql_ping


    DOCH diese Funktion gibt weiterhin TRUE zurück und sagt mir also,
    dass eine Verbindung zu Datenbank hergestellt wurde, obwohl KEINE besteht.



    Kannst Du mir folgen?

  • @BlackAce-Junior




    Das mag alles sein, aber das ist kein Thema der Diskussion.


    Unter Windows läuft diese Funktion momentan einwandfrei. 8|



    Hat jemand eine Problemlösung?


    Ich komme so einfach nicht weiter.

    Liegt der Fehler nun an der Funktion mysql_ping() oder
    möglicherweise daran, dass sie bei OnGameModeInit() benutz wird?


  • Nein, tut mir leid.
    Auch diese Möglichkeit funktioniert leider nicht.


    Die Variable MySQL_Handle ist wie folgt deklartiert:


    new MySQL_Handle = 0;
    D.h. wenn MySQL den Wert nicht ändert, müsste er 0 bleiben.


    Doch MySQL ändert den Connection Handler tatsächlich zu 1,
    obwohl keine aktive zur Datenbank besteht, da diese offline ist.


    public OnGameModeInit()
    {
    print("[MySQL] Die Verbindung zur Datenbank wird hergestellt...\n");


    MySQL_Build(MySQL_Host, MySQL_User, MySQL_Pw, MySQL_Db);
    mysql_debug(true);

    printf("%d", MySQL_Handle);


    if(MySQL_Handle != 0) print("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt.\n");
    else
    {
    print("[MySQL] Beim Verbinden zur Datenbank ist ein Problem aufgetreten.");
    print("[MySQL] Es wird versucht sich erneut zur Datenbank zu verbinden.\n");


    MySQL_Build(MySQL_Host, MySQL_User, MySQL_Pw, MySQL_Db);


    if(MySQL_Handle != 0) print("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt.\n");
    else
    {
    print("[MySQL] Eine Verbindung zur Datenbank ist nicht möglich.\n");
    mysql_close(MySQL_Handle);
    }
    }


    return 1;
    }
    Ausschnitt der Server-Log:



    Leider bin ich nun etwas verwirrt.


    MySQL setzt den Handler offenbar schon direkt während er
    die Verbindung herstellt, auf den jeweiligen Wert, der die
    Verbindungsanzahl zählt.



    Wie überprüfe ich denn nun eine simple bestehene MySQL Verbindung?

  • scho blöd wenn man nicht weiß, dass man im Binärsystem bei 0 anfängt zu zählen sprich
    deklarieren = -1 und abfragen obs anders als -1 ist :)

    Falsche Freunde: Fragen nach Kippen !
    Wahre Freunde: Sind der Grund, warum du keine Kippen hast !
    Falsche Freunde: Nennen deine Eltern Frau/Herr !
    Wahre Freunde: Nennen deine Eltern Mom/Dad !
    Falsche Freunde: Holen dich aus dem Knast und sagen dir, was getan hast, war falsch !
    Wahre Freunde: Sitzen in der Zelle neben dir und sagen: Scheiße...wir haben‘s verkackt...war aber verdammt lustig ! :P
    Falsche Freunde: Haben dich noch nie weinen sehen !
    Wahre Freunde: Weinen mit dir !
    Falsche Freunde: Werden dich stehen lassen, wenn die Menge das tut !
    Wahre Freunde: Werden der kompletten Menge den Arsch treten, die dich stehen gelassen hat ! c:
    Falsche Freunde: Bleiben für ne Weile !
    Wahre Freunde: Bleiben ein Leben lang !
    Falsche Freunde: Werden die Person, die Scheiße über dich erzählt, blöd vollabern !
    Wahre Freunde: Werden sie einfach ausknocken !
    Falsche Freunde: Werden das hier ignorieren !
    Wahre Freunde: Es Kopieren !

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • mysql_connect returnt Connection handle egal ob verbunden oder nicht, also sollte das relativ wenig bringen.


    Nunja, die Funktion mysql_ping() arbeitet aber hier auch nicht richtig.


    Ist der Server offline, sollte sie ja false returnen und nicht, gar nichts.


    Wie gesagt, eine Überprüfung mit mysql_ping() funktionierte ja auch nicht,
    wie Du in den anfänglichen Posts von mir ja deutlich sehen kannst.


    Ich bin echt verwirrt... ?(

  • Moin ;)


    Wenn ich es richtig verstanden habe .. hast du den Namen des Benutzers geändert.. und mysql ping meldet immer noch einen Connect?


    Könnte es evtl. möglich sein das der mysqlping nur den Host+Port anpingt um zu schauen ob der MysqlServer überhaupt läuft :D


    wenn ich z.b. per PHP abfrage ob der MySQL Online ist... ist die Datenbank ja "scheissegal" ;)


    Mach den MySQL mal aus.. und teste dann mal dein Ping ... dann sollte er melden das er Offline ist...

    Scripter Gesucht
    Wir suchen einen Scripter auf den Verlass ist.
    Dieser sollte auch MySQL können.


    TS3 / Page und Server vorhanden!


    Einfach melden ;)

  • Nunja, die Funktion mysql_ping() arbeitet aber hier auch nicht richtig.


    Ich hab das Problem auch aber nur bei externen datenbanken Local alles wunderbar nur wenn ich extern zugreifen will sagt er immer den Ping als 0 und local auf 1
    Ich hab irgendwie den verdacht, das das Plugin irgendein schaden hat aber ich kann mich auch irren

    All in all it's just another brick in the wall


  • Das stimmt da ich selber PHP codiere und dort ist es egal weil die Datenbank ja nix mit der Verbindung zutuen hat.
    Du müsstest dann eine Abfrage erstellen ob die Datenbank existiert..


    Mfg, Syko.