Verbindung c/c++ zu MySQL 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 ein 32-Bit Konsolenprogramm und der Server ist auch 32 Bit, ich binde die Include Dateien und Libarys genau dieses Server ein.

    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.



  • Wie verbindest du dich?

    Zeig mal ein vollständiges Minimalbeispiel.



  • 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) {
    			fprintf(stderr, "%s\n", 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



  • Der Verbindungsversuch von deinem anderen Rechner klappt vmtl. einfach deswegen nicht, weil MySQL nicht auf dem passenden Netzwerkinterface zuhört.

    Hört dein MySQL überhaupt auf irgendwelchen Netzwerkinterfaces zu? Kam 10061 nicht nur bei fehlgeschlagenen Netzwerkverbindungen? Beim Host "localhost" sollte die Verbindung im Normalfall aber doch über ein Unix-Domain-Socket oder per Shared Memory hergestellt werden.

    Falls du dich per Netzwerk verbindest, solltest du auch checken, ob localhost per IPv4 oder IPv6 auflöst und die passende Port-Nummer angeben.


Log in to reply