Rol: connect einer MySQL DB auf einem entfernten Rechner

Hi,

ich habe mit dem Perl DBI immer nur MySQL DB angesproche die auf dem selben Rechner wie das Perl-Script liegen.

Da geht doch sicher auch mit einem entfernten Rechner.

Muß ich dabei nur das:
'my $dbh=DBI->connect("DBI:mysql:database=dbName","username","pw");'
ändern und wenn ja, wie?

Viele Grüße

Rol

  1. Hallo,

    ja es reicht dafür den connect aufruf zu ändern. Schau dir mal die Syntax des connect Befehls an (ich weiss auch nicht auswendig), man kann da irgendwo einen host in form einer IP Adresse oder URL angeben. IP Adresse ist besser, weil es nicht aufgelöst werden muss.
    Grundsätzlich würde ich host, dbname, user und passwort in einer config datei auslagern, damit man es nur einmal an einer zentralen stelle ändern muss, anstatt in allen möglichen skripten die connect befehle per hand anpassen zu müssen.

    Gruß
    Cruz

    Hi,

    ich habe mit dem Perl DBI immer nur MySQL DB angesproche die auf dem selben Rechner wie das Perl-Script liegen.

    Da geht doch sicher auch mit einem entfernten Rechner.

    Muß ich dabei nur das:
    'my $dbh=DBI->connect("DBI:mysql:database=dbName","username","pw");'
    ändern und wenn ja, wie?

    Viele Grüße

    Rol

  2. hi,

    im grunde hast du recht:

    $dbh = DBI->connect($data_source, $username, $password);

    aber die $data_source sollte so aussehen, beispiele:

    dbi:DriverName:database_name
      dbi:DriverName:database_name@hostname
      dbi:DriverName:database_name~hostname!port
      dbi:DriverName:database=database_name;host=hostname;port=port

    also, gib einfach noch den hostname (ip oder name) an. dann geht's.

    grüssle
    bjoern

    1. hi bjoern,

      im grunde hast du recht:
        dbi:DriverName:database_name@hostname

      connect('DBI:mysql:dbName@www.meineDomain.de',"root","");
      (Habe z.Z. noch keinen Benutzer außer root angelegt)

      also, gib einfach noch den hostname (ip oder name) an. dann geht's.

      Leider gibts:
      Error connecting to dbName: Incorrect database name 'dbName@www.meineDomain.de'

      Viele Grüße

      Rol

      1. connect('DBI:mysql:dbName@www.meineDomain.de',"root","");
        (Habe z.Z. noch keinen Benutzer außer root angelegt)
        Leider gibts:
        Error connecting to dbName: Incorrect database name 'dbName@www.meineDomain.de'

        ehm. bin etwas ratlos. ich nehme an das hast du auch schon getestet:
          connect('dbi:mysql:database=dbName;host=127.0.0.1','root','');

        weiss leider auch nicht weiter. sollte doch funktionieren...
        bjoern

      2. Hallo,

        connect('DBI:mysql:dbName@www.meineDomain.de',"root","");
        Error connecting to dbName: Incorrect database name 'dbName@www.meineDomain.de'

        http://search.cpan.org/author/JWIED/Msql-Mysql-modules-1.2219/mysql/lib/DBD/mysql.pm#DESCRIPTION

        Lesen bildet;-)

        Grüße
          Klaus

        1. Hallo,

          http://search.cpan.org/author/JWIED/Msql-Mysql-modules-1.2219/mysql/lib/DBD/mysql.pm#DESCRIPTION

          Lesen bildet;-)

          Danke, aber jetzt schreibt mein Apache ins errorlog:
          DBI->connect(database=testDB;host=www.meineDomain.de) failed: Can't connect to MySQL server on www.meineDomain.de (10061)

          Könnte es sein, dass mein Provider (UUNet) das blockt?

          Viele Grüße

          Rol

        2. Hallo,

          http://search.cpan.org/author/JWIED/Msql-Mysql-modules-1.2219/mysql/lib/DBD/mysql.pm#DESCRIPTION

          Lesen bildet;-)

          my $dbh = DBI->connect("DBI:mysql:database=testDB;host=$host","bobby", "susi", {RaiseError => 1});

          Da müsten man doch noch irgendwo Passwort und Benutzername für den entfernten Rechner angeben. Sonst könnte doch da jeder auf meine DB zugreifen.
          Oder habe ich da jetzt 'nen Knoten in meinen Gedanken?

          Viele Grüße

          Rol

          1. Hallo,

            my $dbh = DBI->connect("DBI:mysql:database=testDB;host=$host","bobby", "susi", {RaiseError => 1});

            Da müsten man doch noch irgendwo Passwort und Benutzername für den entfernten Rechner angeben.

            Was glaubst Du, bzw. weißt Du nach intensiver Lektüre der Dokumenattion, wofür "bobby" und "susi" in obigem Funktionsaufrif stehen?

            Sonst könnte doch da jeder auf meine DB zugreifen.

            Nur wenn "bobby" und "susi" jedem bekannt sind, oder ausforschbar sind.

            Aber mit diesem Problem stehst Du nicht alleine da. Es gibt gruzndsätzlich natürlich auch die Möglichkeit, die Datenbankzugriffe nur von bestimmten Rechnern aus zuzulassen. Ob dies bei mySQL auch so ist, müßte eigentlich in der Dokumenation stehen.
            Eventuell könntest Du diese eingeschränkten Zugriffsmöglichkeiten auch mit Mitteln wie einer Firewall realisieren, die nötigen Rechte am Server vorausgesetzt.

            Grüße
              Klaus

            1. Hallo,

              my $dbh = DBI->connect("DBI:mysql:database=testDB;host=$host","bobby", "susi", {RaiseError => 1});

              Da müsten man doch noch irgendwo Passwort und Benutzername für den entfernten Rechner angeben.

              Was glaubst Du, bzw. weißt Du nach intensiver Lektüre der Dokumenattion, wofür "bobby" und "susi" in obigem Funktionsaufrif stehen?

              Ich glaube, ich habe hier eine grundsätzlich Wissenslücke, vielleicht kanns du mir etwas auf die Sprünge helfen:

              Ich habe die Name/PW Kombination mit der ich mich (z.B. über FTP oder Telnet) auf dem (entfernten) Rechner einloge (z.B. "ich" und "meinPasswort"[1]).

              Dann habe ich für die MySQL Datenbank auf diesen Rechner noch Benutzer mit je einem zugehörigem PW (z.B. "bobby" und "susi" [2]) angelegt.

              Wenn ich die DB mit einem Perl-Script auf dem gleichen (dem entferntem) Rechner anspreche, über gebe ich beim DBI->connect doch die "DB"-Name/PW Kombination[2] oder einfach "root" und "".

              Müßte ich mich bei einem DB Zugriff von einem entferntem Rechner aus nicht erst einmal (wie beim einloggen über Telnet) mit de Name/PW Kombination [1] anmelden und dann den connect mit [2] oder eben "root" und "" machen ?

              Viele Grüße

              Rol