Verbindung c/c++ zu MySQL Server schlägt fehl



  • Hallo leute,

    ich benutze Visual Studio 2013 und möchte in C++ mein MySQL Server ansprechen der ebenfalls unter Windows läuft. Ich habe alle Include Dateien Bibliotheken eingebunden und gegen die Datei libmysql.lib gelinkt. Mein Server läuft und ich habe ein paar Datensätze eingebunden. Das Programm läuft auch, jedoch kriege ich die wenn ich eine query lossende über

    if ( mysql_query(conn, sql.c_str()) ) {
    	fprintf(stderr, "%s\n", mysql_error(conn));
    	return false;
    }
    

    Eine Fehlermeldung welche lautet : MySQL server has gone away.
    Der Dienst läuft unter dem Namen MySQL57 (Arbeitsplatz->Verwalten->Dienste)

    Ich habe bereits gegoogelt und am wahrscheinlichsten soll es ein Timeout sein, kann aber bei mir nicht sein, weil ich mich verbinde und unmittelbar die Anfrage lossende. Auch ist es bei mir localhost wait_timeout ist bei mir auf 28800 gesetzt.
    Der 2te Fehlerfall kann auch nicht stimmen, wenn nämlich die Query zu groß ist
    meine Query lautet : "Select * from test"; => ist nichtmal ein KB und die Begrenzung ist auf MB eingestellt in der ini. Der Rückgabewert dieser Query sind 3 Zeilen höhstens also 1 KB groß.

    Vllt könnt ihr mir weiterhelfen.



  • Möglicherweise hast du conn kaputtgemacht.

    Ansonsten ist das ein MySql- und keine C++-Frage.



  • manni66 schrieb:

    Möglicherweise hast du conn kaputtgemacht.

    ja, das finde ich auch.
    hört sich so an als ob du das mysql-connection-handle zerstörst bzw. es seine gültigkeit verliert.
    oder du von anfang an keine richtige verbindung zu dem mysql server hast/hattest?
    bist du dir denn sicher das du dich erfolgreich mit dem mysqlserver verbunden hast? wenn ja wieso?

    lg
    ps. zeig mal den code wo du conn anlegst... vll geht da schon was schief...



  • hab gerade noch was gefunden das dir vll helfen kann:

    std::cout << "MySQL client version: " << mysql_get_client_info();
    

    funktioniert das bei dir?

    falls ja dann versuch das mal:

    //Verbinden mit DB
    	if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))
    	{
    		std::cout <<"1: " << mysql_error(conn);
    		exit(1);
    	}
    
    	//SQL query senden
    	if (mysql_query(conn, "show Tables"))
    	{
    		std::cout <<"2: " << mysql_error(conn);
    		exit(1);
    	}
    

    dann schau mal ob das geht, und wo der fehler auftritt...
    dann kannst du schonmal eingrezen ob du gar keine verbindung aufbaust oder ob das senden des querys fehl schlägt...
    du aber erfolgreich verbunden bist / bzw. warst ... 😃

    hoff das hilft dir wenigstens etwas...



  • conn = mysql_init(NULL);
    if (conn == NULL) {
    	fprintf(stderr, "MySQL initialisation failed");
    	throw("MySQL : Initialisation failed");
    }
    
    if (mysql_real_connect(conn, host, user, pw, db, port, unix_socket, client_flag)) {
    	fprintf(stderr, "%s\n", mysql_error(conn));
    	mysql_close(conn);
    	throw("MySQL : Connection failed");
    
    }
    


  • Hallo habe nun nach der Verbindung folgenden Befehl ausgeführt, wie mir geraten wurde.

    std::cout << "MySQL client version: " << mysql_get_client_info();
    

    Als Ergebnis kam : MySQL client version: 5.7.4-m14.
    Daher ist die Verbindung erfolgreich, sonst wär beim Verbindungsaufbau eine Exception geworfen. Der Fehler passiert erst wenn ich eine Query losschicke.

    folgende Belegung für die Variablen bei mysql_real_connect
    port = 0
    unix_socket = NULL
    client_flag = 0
    host = "localhost"
    user = "root" => existiert tatsächlich überprüft über CommandLineInterf
    pw = "root" => existiert tatsächlich überprüft über CommandLineInterf
    db = "neu" => existiert tatsächlich überprüft über CommandLineInterf

    Meine Abfrage lautet : "Select * from test"
    Auch die Tabelle test existiert.



  • Vielen Dank MySQLSolverCPP

    Ich habe nun gesehen, dass ich das Ausführungszeichen vor mysql_real_connect vergessen habe. Vielen Dank für deine Hilfe.

    Ich kriege nun folgende Fehlermeldung
    Can't connect to MySQL server on '127.0.0.1' (10061)



  • Laut google und den Windows System Error Codes wird die Verbindung verweigert.

    Sicher dass der Server läuft und du darauf zugreifen darfst ? Eventuell die Firewall anpassen oder die Serversettings.



  • MYSQL *conn = mysql_init(NULL);
    
    	try {
    		if (conn == NULL) {
    			throw("MySQL : Initialisation failed");
    		}
    
    		if (!mysql_real_connect(conn, "localhost", "root", "root", "neu", 0, NULL, 0)) {
    			cerr << mysql_error(conn) << endl;
    			mysql_close(conn);
    			throw("MySQL : Connection failed");
    		}
    
    		if (mysql_query(conn, "Select * from test")) {
    			cerr << mysql_error(conn);
    			throw("MySQL : Query failed");
    		}
    
    		MYSQL_RES *res = mysql_store_result(conn);
    		MYSQL_ROW row;
    
    		if (res == NULL) {
    			cerr << mysql_error(conn);
    			throw("MySQL : Result failed");
    		}
    
    		while ((row = mysql_fetch_row(res))) {
    			for (int i = 0; i < mysql_num_fields(res); i++) {
    				cout << (row[i] ? row[i] : "NULL") << 't';
    			}
    			putchar('\n');
    		}
    
    	}
    	catch (const char *s) {
    		cerr << s;
    	}
    

    Also ich hab nun einen anderen Fehler habe leider ein Ausführungszeichen vergessen vor mysql_real_connect. Ich habe nun folgendes Problem
    Can't connect to MySQL server on 'localhost' (10061)
    Der Service läuft Start->Ausführen->services.msc oder Win+R services.msc läuft der Dienst als MySQL57 ist wie mein Programm eine 32-Bit Anwendung. Habe auch die Firewall ausgeschaltet kein Erfolg. Über das Konsolenprogramm "MySQL 5.7 Command Line Client" welches mitgeliefert wird, kann ich mich erfolgreich einloggen. Habe einen zweiten Ubuntu/Linux Rechner genommen, dort auch mysql installiert und versucht darauf mich zu verbinden. ebenfalls erfolglos.

    Vllt könnt ihr mir weiterhelfen

    Danke



  • manni66 schrieb:

    Ansonsten ist das ein MySql- und keine C++-Frage.



  • Tom121312 schrieb:

    Vielen Dank MySQLSolverCPP

    Ich habe nun gesehen, dass ich das Ausführungszeichen vor mysql_real_connect vergessen habe. Vielen Dank für deine Hilfe.

    Ich kriege nun folgende Fehlermeldung
    Can't connect to MySQL server on '127.0.0.1' (10061)

    kein problem gerne 🙂
    freut mich das du dein problem lösen konntest 🙂

    diese meldung kann mehrer ursachen haben, das ist schwierig so zu sagen

    hast du mal anstatt localhost - 127.0.0.1 versucht ?
    geht das?

    wenn nicht, kannst auch mal hier schauen:
    http://stackoverflow.com/questions/24525736/cant-connect-to-mysql-server-on-127-0-0-1-10061-2003

    ansonsten weiß ich jetzt so auch nicht, google wirft zu der fehlermeldung auch viel aus, dort kannst du auch nochmal schauen was evt bei dir die ursache sein kann...



  • manni66 schrieb:

    manni66 schrieb:

    Ansonsten ist das ein MySql- und keine C++-Frage.

    Diese Aussage hast du schonmal getätigt. Wo wir schon bei Datenbanken sind, sollte man doch Redundanzen vermeiden. Durch wiederholen deiner unbrauchbaren Aussage wirkst du auch nicht klüger. Daher empfehle ich dir, wenn du schon zur Problemstellung keine Antwort hast, einfach mal nix dazu sagen(höfflich ausgedrückt).

    Zum Thema:
    Ich habe nun den Code auf Linux ausgeführt und da klappt es. Aber irgendwo ist bei Windows der Wurm drin. Irgendwo muss ich was einstellen, ich weiß aber nicht was ?



  • Tom121312 schrieb:

    manni66 schrieb:

    manni66 schrieb:

    Ansonsten ist das ein MySql- und keine C++-Frage.

    Diese Aussage hast du schonmal getätigt. Wo wir schon bei Datenbanken sind, sollte man doch Redundanzen vermeiden. Durch wiederholen deiner unbrauchbaren Aussage wirkst du auch nicht klüger. Daher empfehle ich dir, wenn du schon zur Problemstellung keine Antwort hast, einfach mal nix dazu sagen(höfflich ausgedrückt).

    Zum Thema:
    Ich habe nun den Code auf Linux ausgeführt und da klappt es. Aber irgendwo ist bei Windows der Wurm drin. Irgendwo muss ich was einstellen, ich weiß aber nicht was ?

    🙄
    ließ mal in dem SO link von mir oben, hört sich so an als wenn du genau dasselbe problem hättest...
    du hast wahrscheinlich i.wo ein konfig fehler...

    bist du dir auch sicher das dein server unter windows überhaupt gestartet ist bzw. du ihn gestartet hast? 😃
    über den browser erreichst du deine datenbank auf localhost ja? (also die MySQL-DB ist auch gestartet ja?)

    ansonsten hat manni schon recht , das ist ein mysql problem was bei dir diesen fehler verursacht, das hat nix mehr mit dem code zutun ... 😃



  • Ja Service läuft wie gesagt komm per Command Line Interface rein habe auch im Ordner bin "mysqld --install" eingegeben und als Antwort kam "Service successfully installed". Das Ding ist ich komm nicht auf meinen Windows Rechner nicht mal auf den Servicedienst drauf, welcher auf Ubuntu läuft und unter Ubuntu läuft mein Code.



  • Das Problem hat sich gelöst. Es lag an einem anderen Programm XAMPP, dies hat auch an Board mysql und das hat wohl meinen mysql server gestört. 😃


Anmelden zum Antworten