Nadine: Externe Datenbank - wie connecten!?

Hallo Leute, ich poste zum ersten mal und weiss nicht ob ihr mir helfen könnt.

Also ich möchte in einem PHP-Script zu einer Datenbank connecten die auf einem anderen Server liegt (Ja, die Datenbank ist von anderen Servern zugänglich, bin bei 1und1 und die haben mir diesen Host mitgeteilt)

Also wenn ich nur die Domain des Servers angebe (dbXXX.1und1.com) so wies mir mitgeteilt wurde dann gehts nicht, er kann dann nicht connecten.

Jetzt hab ichs mit http:// vorne probiert und auch mit dem Port (:XXXX) hintendran probiert, geht einfach nicht, also so sieht das ganze aus:

$mysql_db_name = "dbXXXXXXXXXXXXXXX";
$mysql_pass = "XXXXXXXXXXXX";
$mysql_user = "XXXXXXXX";
$mysql_host = "dbXXX.1und1.de";

@mysql_connect($mysql_host,$mysql_user,$mysql_pass) or die(mysql_error());

@mysql_select_db($mysql_db_name) or die(mysql_error());

Geht einfach nicht, er bringngt diese Fehlermeldung:

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Kann mir da einer auf die Sprünge helfen, wo liegt mein Denkfehler oder was habe ich falsch gemacht?

(Bin blond *ggg*)

Danke für eure Hilfe.

  1. Hallo!

    $mysql_db_name = "dbXXXXXXXXXXXXXXX";
    $mysql_pass = "XXXXXXXXXXXX";
    $mysql_user = "XXXXXXXX";
    $mysql_host = "dbXXX.1und1.de";

    @mysql_connect($mysql_host,$mysql_user,$mysql_pass) or die(mysql_error());

    @mysql_select_db($mysql_db_name) or die(mysql_error());

    Geht einfach nicht, er bringngt diese Fehlermeldung:

    Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

    Irgendwas davon kann nicht stimmen.

    Guck Dir die Funktions-Definition zu mysql_connect() an: http://de.php.net/mysql_connect

    Da steht, dass der erste Parameter entweder der Servername ist, oder ein Unix-Socket. Du gibst angeblich einen Servernamen an (für TCP, was ja auch nötig ist für Deinen Zweck), Du erhälst allerdings die Fehlermeldung, dass die Unix-Socket Verbindung nicht hergestellt werden kann.
    Das passt irgendwie nicht zusammen.

    http:// ist übrigens definitiv falsch, weil mysql hier ein eigenes TCP-Protokoll verwendet, was nichts mit HTTP zu tun hat.

    Grüße
    Andreas

    PS: Ich würde den Funktionen auch kein @ vorausstellen.

    --
    SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
    1. Danke erstmal für deine Antwort,

      Guck Dir die Funktions-Definition zu mysql_connect() an: http://de.php.net/mysql_connect

      Da steht, dass der erste Parameter entweder der Servername ist, oder ein Unix-Socket. Du gibst angeblich einen Servernamen an (für TCP, was ja auch nötig ist für Deinen Zweck), Du erhälst allerdings die Fehlermeldung, dass die Unix-Socket Verbindung nicht hergestellt werden kann.
      Das passt irgendwie nicht zusammen.

      Ja ich weiss, aber was ist dann falsch? Am Server und/oder der Db kanns nicht liegen, PHPMyAdmin arbeitet mit den selbe Servern (also es ist auf dem selben server installiert und nutzt die selbe externe Datenbank) und funktioniert ohne Probleme.

      http:// ist übrigens definitiv falsch, weil mysql hier ein eigenes TCP-Protokoll verwendet, was nichts mit HTTP zu tun hat.

      Ok, aber was dann?

      PS: Ich würde den Funktionen auch kein @ vorausstellen.

      Wieso? Ich mache doch dazu manuelle Fehlermeldungen ;-)

      Danke.

      1. Hallo Nadine!

        Das passt irgendwie nicht zusammen.

        Ja ich weiss, aber was ist dann falsch? Am Server und/oder der Db kanns nicht liegen, PHPMyAdmin arbeitet mit den selbe Servern (also es ist auf dem selben server installiert und nutzt die selbe externe Datenbank) und funktioniert ohne Probleme.

        Ja, aber ich denke das hat auch jemand anders installiert, oder? ;-)

        http:// ist übrigens definitiv falsch, weil mysql hier ein eigenes TCP-Protokoll verwendet, was nichts mit HTTP zu tun hat.

        Ok, aber was dann?

        Ich kenne Dein Script nicht, da wird irgendwo ein Fehler drin sein. Ich würde mal empfehlen, mit einem einfachen Script anzufangen, am besten das Beispiel aus dem Manual als Vorlage nehmen:

        <?php
        $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
        if (!$link) {
           die('keine Verbindung möglich: ' . mysql_error());
        }
        echo 'Verbindung erfolgreich';
        mysql_close($link);
        ?>

        siehe: http://de.php.net/mysql_connect

        Hier setzt Du einfach mal die 3 Werte von Dir ein, also

        mysql_connect('dbXXX.1und1.de', 'dein_username', 'dein_passwort')

        Was passiert dann?

        Wenn das nicht funktioniert, ist an Deinen Zugangsdaten was falsch, oder der Server ist nicht erreichbar, aber wenn phpMyAdmin funktioniert, kommt wohl nur ersteres in Frage.

        PS: Ich würde den Funktionen auch kein @ vorausstellen.

        Wieso? Ich mache doch dazu manuelle Fehlermeldungen ;-)

        Für den Live-Betrieb ist das natürlich sinnvoll, aber wenn man debuggt sollte man alle Fehlermeldungen einsammeln, die man kriegen kann ;-)

        mysql_error() gibt keine PHP-Fehler aus, sondern Fehler des MySQL-Servers. Wenn allerdings keine Verbindung hergestellt werden kann, bringt das herzlich wenig ;-)

        Trotzdem ist die Verwendung von mysql_error() später sehr sinnvoll, wenn die Verbindung einmal steht!

        Grüße
        Andreas

        --
        SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
      2. Hello,

        Ja ich weiss, aber was ist dann falsch? Am Server und/oder der Db kanns nicht liegen, PHPMyAdmin arbeitet mit den selbe Servern (also es ist auf dem selben server installiert und nutzt die selbe externe Datenbank) und funktioniert ohne Probleme.

        Habe ich das jetzt richtig verstanden, dass Du zu einer Datenbank verbinden willst, die auf einem anderen Server liegt? Dann muss natürlich ein Portvorwarding für diesen Port eingerichtet sein, sonst kann die Verbindung nicht hergetellt werden.

        PHPmyAdmin liegt i.d.R auf derselben Maschine und hat daher keine zusätzlichen Sicherheitsschranken.

        Wenn Du Dich allerdings in einem LAN befindest, in dem sich keine Router oder Firewalls zwischen den Servern befinden, dann liegt der Fehler irgendwo anders.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Moin!

          Ja ich weiss, aber was ist dann falsch? Am Server und/oder der Db kanns nicht liegen, PHPMyAdmin arbeitet mit den selbe Servern (also es ist auf dem selben server installiert und nutzt die selbe externe Datenbank) und funktioniert ohne Probleme.

          Habe ich das jetzt richtig verstanden, dass Du zu einer Datenbank verbinden willst, die auf einem anderen Server liegt? Dann muss natürlich ein Portvorwarding für diesen Port eingerichtet sein, sonst kann die Verbindung nicht hergetellt werden.

          Falsch. Ein Portforwarding muß eingerichtet werden, wenn man auf direktem Wege nur zu einem Host connectieren kann, welcher nicht die eigentliche Datenbank betreibt, sondern nur als Zwischenstation agiert und selbst NAT macht.

          Dies ist für alle mir denkbare Szenarien, bei denen die Datenbank auf einem 1&1-Server liegt, absolut nicht notwendig, bzw. läge weit außerhalb der Einflußmöglichkeiten von Nadine.

          PHPmyAdmin liegt i.d.R auf derselben Maschine und hat daher keine zusätzlichen Sicherheitsschranken.

          Keine Regel ohne Ausnahme, würde ich sagen. Jedenfalls gehört es eher zum Alltagsszenario, zu einer MySQL-DB mittels TCP Kontakt aufzunehmen. Warum es in diesem speziellen Fall noch nicht funktioniert, bleibt zu klären.

          - Sven Rautenberg

          1. Hello,

            Habe ich das jetzt richtig verstanden, dass Du zu einer Datenbank verbinden willst, die auf einem anderen Server liegt? Dann muss natürlich ein Portvorwarding für diesen Port eingerichtet sein, sonst kann die Verbindung nicht hergetellt werden.

            Falsch. Ein Portforwarding muß eingerichtet werden, wenn man auf direktem Wege nur zu einem Host connectieren kann, welcher nicht die eigentliche Datenbank betreibt, sondern nur als Zwischenstation agiert und selbst NAT macht.

            Packete für Port 3306 dürfen aber auch nicht ausgefiltert werden. Viele Provider haben den direkten Kontakt "von außen" mit MySQL abgestellt, da die 3er-Version noch Lücken im SAM bzw. SAD hatte. Bei der 4er Version hat sich da einiges geändert, sodass leider auch einige Applikationen neu durchdacht werden müssen.

            Ich habe das Problem auch, dass ich mit MySQL-Front nicht an die DB herankomme, obwohl es ein vServer ist. Ich habe bisher allerdings auch nicht gedrängelt, dass es behoben wird. Denn an einer Online-Version sollte man keine Designänderungen im laufenden Betrieb vornehmen. Mit SSH und "mysql" funktioniert das natürlich trotzdem.

            Dies ist für alle mir denkbare Szenarien, bei denen die Datenbank auf einem 1&1-Server liegt, absolut nicht notwendig, bzw. läge weit außerhalb der Einflußmöglichkeiten von Nadine.

            Ja, das befürchte ich, dass sie da keine Möglichkeit hat.

            PHPmyAdmin liegt i.d.R auf derselben Maschine und hat daher keine zusätzlichen Sicherheitsschranken.

            Keine Regel ohne Ausnahme, würde ich sagen. Jedenfalls gehört es eher zum Alltagsszenario, zu einer MySQL-DB mittels TCP Kontakt aufzunehmen.

            Bist Du sicher, dass 1&1 das zulässt? Sie hat ja schon beim Socket Probleme und nicht erst beim Login. Dazu muss dann natürlich auch ein (weiterer) User eingerichet werden, da si dann nicht user@localhost ist, sondern user@<ip>. Und da nun user@% einzustellen, halte ich doch für waghalsig.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hallo!

              Habe ich das jetzt richtig verstanden, dass Du zu einer Datenbank verbinden willst, die auf einem anderen Server liegt? Dann muss natürlich ein Portvorwarding für diesen Port eingerichtet sein, sonst kann die Verbindung nicht hergetellt werden.

              Wie kommst Du darauf? Das ist reine Konfigurations-Sache ob der Server über einen TCP-Port von außen erreichbar ist. Dass dies bei 1und1 so vorgesehen ist steht in deren FAQ:
              http://faq.1und1.de/hosting/scripte_datenbanken/php/3.html

              Packete für Port 3306 dürfen aber auch nicht ausgefiltert werden.

              Wer sagt dass das passiert? Ich denke die bei 1und1 wissen durchaus was sie tun.

              Viele Provider haben den direkten Kontakt "von außen" mit MySQL abgestellt, da die 3er-Version noch Lücken im SAM bzw. SAD hatte.

              Ist aber unwahrscheinlich wenn der Provider sagt man solle über Servernamen "xy" auf den im Hosting-Paket enthaltenen MySQL-Server zugreifen.

              Ich habe das Problem auch, dass ich mit MySQL-Front nicht an die DB herankomme, obwohl es ein vServer ist. Ich habe bisher allerdings auch nicht gedrängelt, dass es behoben wird.

              Das Problem hatte ich noch nie, und ich habe schon viele Versionen auf unterschiedlichen Betriebssystemen verwendet. Das ist eine simple Konfigurations-Angelegenheit wer von wo mit auf den Server zugreifen kann.

              Denn an einer Online-Version sollte man keine Designänderungen im laufenden Betrieb vornehmen.

              Das kommt drauf an, wenn mir das Feature wichtig ist, dann muss ich den Dienst halt mal eben neu starten, von mir aus um 4 Uhr morgens. Wenn ich zusätzlichen Clients Verbindungen ermögliche, würde ich das nicht wirklich als "Designänderung" bezeichnen, denn für bestehende Anwendungen ändert sich rein gar nichts.

              Mit SSH und "mysql" funktioniert das natürlich trotzdem.

              Du meinst also einen Zugriff von außen? Ja, ich würde nach Möglichkeit niemals den MySQL Port nach außen öffnen, denn auch neuere Versionen von mysqld enthielten schon Fehler die man ausnutzen konnte. Ich verstehe natürlich auch, dass man im shared hosting nicht auf jedem Web-Server mysql installieren möchte (wobei ich das an deren Stelle trotzdem machen würde, wie es einige Provider praktizieren), und schon gar nicht jedem User einen Shell-Account geben möchte :)

              Keine Regel ohne Ausnahme, würde ich sagen. Jedenfalls gehört es eher zum Alltagsszenario, zu einer MySQL-DB mittels TCP Kontakt aufzunehmen.

              Bist Du sicher, dass 1&1 das zulässt?

              Siehe FAQ-Link oben.

              Sie hat ja schon beim Socket Probleme und nicht erst beim Login.

              Wir kennen das komplette Script nicht, also kann man das noch gar nicht wirklich so genau sagen ;-)

              Dazu muss dann natürlich auch ein (weiterer) User eingerichet werden, da si dann nicht user@localhost ist, sondern user@<ip>. Und da nun user@% einzustellen, halte ich doch für waghalsig.

              Wie gesagt, ich denke 1und1 macht sowas nicht zum ersten mal ;-)

              Grüße
              Andreas

              --
              SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
        2. Hups, sorry der Fehler lag ganz wo anders, ich habe euch ja nur die gekürzte Version gezeigt...

          ICh habe das Verbinden in eine Funktion gepackt und die Daten in Variablen gepackt. Diese VAriablen waren allerdings außerhalb der Funktion definiert, darum hat er die nicht erkannt.

          *schäm* sorry dass ich euch so auf Trab gehalten habe :(

          1. Hello,

            *schäm* sorry dass ich euch so auf Trab gehalten habe :(

            Menno, vor lauter Kummer habe ich mir heute Abend einen angetrunken ...:-)

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
  2. Habe gerade den Servicemenschen angerufen der hatte aber keine Ahnung von MySQL.
    Naja, jetzt hab ich an den MySQL-Kundendienst geschrieben, bin ja mal gespannt...

  3. Moin!

    Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

    Zitiere aus dem PHP-Manual:
    _____ZITAT_____
    ...
    resource mysql_connect ( [string Server [, string Benutzername [, string Benutzerkennwort [, bool neue_Verbindung [, int client_flags]]]]])
    ...
    mysql_connect() öffnet eine Verbindung zu einem MySQL Server. Für fehlende optionale Parameter werden folgende Standardwerte angenommen: Server = 'localhost:3306', Benutzername = Name des Benutzers dem der Server-Prozess gehört und Benutzerkennwort = leeres Kennwort.

    Der Parameter Server kann zudem die Portnummer enthalten, z.B. "hostname:port" oder den Pfad zu einem lokalen Socket z.B. ":/pfad/zum/socket" für Zugriffe auf dem lokalen Rechner (localhost).
    ...
    ____ZITATENDE_____

    Kann mir da einer auf die Sprünge helfen, wo liegt mein Denkfehler oder was habe ich falsch gemacht?

    schau dir die fehlermeldung genau an und den text im manual( http://de.php.net/mysql_connect

    (Bin blond *ggg*)

    das ist noch lange kein grund, dass du doof sein müsstest ;-)

    Danke für eure Hilfe.

    hoffe ich konnte helfen
    ichen

    --
    Selfcode: sh:( fo:| br: n4:& ie:% mo:| mo:| de:] zu:) fl:| ss:| ls:[ js:|