| Author |
Message |
MTV-King
knows MySQLDumper

Joined: 17 Nov 2007
Posts: 4

|
Posted:
2007-11-17, 20:45 Fehlermeldung: Can't connect to local MySQL server |
  |
Hallo.
Immer wenn ich das Cronscript aufrufe erhalte ich folgende Fehlermeldung:
Quote: Software error:
Database connection not made: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) at crondump.pl line 247.
Die Perl-Tests laufen jedoch erfolgreich.
In der Konfiguration unter "Verbindungsparameter" habe ich den Port "3306" und den Socket "/var/run/mysqld/mysqld.sock" eingetragen. Diese Daten wurden mir von meinem Provider gegeben.
MSD-Version ist 1.22.
Wo liegt der Fehler und wie behebe ich ihn?
|
|
  |
 |
Anzeigen
|
Posted:
Anzeigen |
 |
|
| |
 |
DSB
Developer


Age: 41
Joined: 30 Apr 2004
Posts: 16067
Location: Reichenberg bei Würzburg

|
Posted:
2007-11-17, 22:11 (No subject) |
  |
Das Perlscript übernimmt eine Angabe der socket-Datei noch nicht.
Dazu kannst Du aber in crondump.pl Zeile 247 anpassen von
$dbh = DBI->connect("DBI:mysql:$dbname:$dbhost:$dbport","$dbuser","$dbpass") || die "Database connection not made: $DBI::errstr";
auf
$dbh = DBI->connect("DBI:mysql:$dbname:$dbhost:$dbport;mysql_socket=/pfad/zu/mysql.sock'","$dbuser","$dbpass") || die "Database connection not made: $DBI::errstr";
Klappt das dann?
Normalerweise müsste der Pfad zur richtigen mysql.sock in der Systemumgebung korrekt konfiguriert sein. Bei Dir ist das aber offensichtlich nicht der Fall. Deine mysql.sock liegt nicht dort, wo sie laut Konfiguration liegen sollte, weshalb die Verbindung zur DB fehlschlägt. Da hast Du noch einen kleinen Konfigurationsfehler auf Deinem Server.
Die bessere Alternative (auch im Hinblick auf anderte Perlskripte) wäre natürlich, die falsche Konfiguration zu beseitigen, so dass alle Skripte ohne explizite Angabe des Pfads zur mysql.sock insgesamt funktionieren. Durch die explizite Angabe das Pfads wird zwar die fehlerhafte Konfiguration wieder korrigiert, aber zielführend ist das ja nicht.
Eine andere Möglichkeit der Umgehung wäre es, einen symbolischen Link '/tmp/mysql.sock' anzulegen, der auf die richtige Datei verweist.
_________________ Gruß / Greetings, DSB
Teigwaren heißen Teigwaren, weil sie Teig waren.
Diejenigen, die lautstark darüber diskutieren, warum es nicht geht, mögen bitte jene nicht stören, die es gerade tun.
|
|
    |
 |
MTV-King
knows MySQLDumper

Joined: 17 Nov 2007
Posts: 4

|
Posted:
2007-11-17, 23:22 (No subject) |
  |
schonmal danke für die schnelle Antwort.
Leider funktioniert das auch nicht.
Fehlermeldung sieht nun so aus:
Quote: Software error:
Database connection not made: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'' (2) at crondump.pl line 247.
|
|
  |
 |
DSB
Developer


Age: 41
Joined: 30 Apr 2004
Posts: 16067
Location: Reichenberg bei Würzburg

|
Posted:
2007-11-17, 23:26 (No subject) |
  |
Der Parameter wird aber korrekt übernommen und angewendet. Am Syntax liegt es also nicht.
Entweder stimmt der Pfad dann nicht oder die Datei existiert nicht.
Wieso eigentlich mysqld.sock? Ich kenne das nur als mysql.sock.
_________________ Gruß / Greetings, DSB
Teigwaren heißen Teigwaren, weil sie Teig waren.
Diejenigen, die lautstark darüber diskutieren, warum es nicht geht, mögen bitte jene nicht stören, die es gerade tun.
|
|
    |
 |
MTV-King
knows MySQLDumper

Joined: 17 Nov 2007
Posts: 4

|
Posted:
2007-11-18, 12:53 (No subject) |
  |
OK.
Warum ausgerechnet mysqld.sock weiß ich nicht. Es wird aber wegen der Sicherheit nicht der Standard-Socket verwendet.
Ich werde mich nochmal mit meinem Provider in Verbindung setzen.
|
|
  |
 |
DSB
Developer


Age: 41
Joined: 30 Apr 2004
Posts: 16067
Location: Reichenberg bei Würzburg

|
Posted:
2007-11-18, 15:10 (No subject) |
  |
Das d steht normalelweise für Daemon (also den Prozess im Hintergrund, bzw. den eigentlichen MySQL-Server), aber in diesem Zusammenhang kenne ich das nicht. In dieser Datei werden lediglich ausgehandelte Verbindungshandles temporär abgelegt. Normalerweise (ohne aktive MySQL-Verbindungen) ist die Datei leer. Insofern kann ich ein Sicherheitsargument in diesem Kontext nicht nachvollziehen.
Schau mal hier: http://www.apachefriends.org/f/viewtopic.php?t=26679
Dort wird auch auf die mysql.sock verwiesen und nicht auf mysqld.sock.
Probier das mal.
_________________ Gruß / Greetings, DSB
Teigwaren heißen Teigwaren, weil sie Teig waren.
Diejenigen, die lautstark darüber diskutieren, warum es nicht geht, mögen bitte jene nicht stören, die es gerade tun.
|
|
    |
 |
MTV-King
knows MySQLDumper

Joined: 17 Nov 2007
Posts: 4

|
Posted:
2007-11-21, 20:22 (No subject) |
  |
habe es nun funktionierend.
habe folgendes geändert:
du hast mir diesen Code gegeben:
$dbh = DBI->connect("DBI:mysql:$dbname:$dbhost:$dbport;mysql_socket=/pfad/zu/mysql.sock'","$dbuser","$dbpass") || die "Database connection not made: $DBI::errstr";
es müsste aber so sein:
$dbh = DBI->connect("DBI:mysql:$dbname:$dbhost:$dbport:mysql_socket=/var/run/mysqld/mysqld.sock","$dbuser","$dbpass") || die "Database connection not made: $DBI::errstr";
Unterschied war
1. vor "mysql_socket" hattest du ein Semikolon geschrieben, da müsste aber ein Doppelpunkt hin.
2. ein Hochkomma hinter "mysqld.sock", was da wohl nicht hinsollte
also nun funktioniert es richtig. Ich danke dir vielmals für deine Hilfe.
|
|
  |
 |
DSB
Developer


Age: 41
Joined: 30 Apr 2004
Posts: 16067
Location: Reichenberg bei Würzburg

|
Posted:
2007-11-21, 23:36 (No subject) |
  |
Ich habs aus dem verlinkten Beispiel abgeschrieben.
Da sieht man mal wieder, dass man sich auf keine Angabe anderer verlassen kann. ;(
Tatsächlich testen konnte ich das noch nicht.
Danke für den Hinweis.
_________________ Gruß / Greetings, DSB
Teigwaren heißen Teigwaren, weil sie Teig waren.
Diejenigen, die lautstark darüber diskutieren, warum es nicht geht, mögen bitte jene nicht stören, die es gerade tun.
|
|
    |
 |
|
|
CrackerTracker © 2004 - 2012 CBACK.de
Powered by Orion based on phpBB
© 2001, 2002 phpBB Group
CBACK Orion Style based on FI Theme
All times are GMT + 2 Hours
phpBB SEO
|