PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ruby]Kann von "extern" nicht auf DB zugreifen!



juan_
27.01.2008, 12:26
Hoi,


ich habe folgendes Script, welches mir ganz easy beasy von meinem "Homeserver" nen sql-Datensatz auslesen soll.



require "rubygems"
require "mysql"

begin
conn = Mysql.new("192.168.0.181", "xyz", "xyz")
conn.select_db("musik")


rescue Mysql::Error => e
puts "fehlermeldung: #{e.errno}"
puts "fehlermeldung: #{e.error}"

end

result = conn.query(
"SELECT int_name, cd_titel, cd_jahr
FROM interpreten, cds
WHERE int_nr=cd_interpret"
)


if result.num_rows > 0
while line = result.fetch_row
printf "'%s' von %s (%i)\n", line[1], line[0], line[2]
end
else
puts "Kein Ergebnis gefunden"
end


conn.close

Allerdings kommt die Meldung :


mysql.rb:4:in `new': Can't connect to MySQL server on '192.168.0.181' (111) (Mysql::Error)
from mysql.rb:4


wenn ich das Script spaßeshalber auf dem Server -mit dem host "localhost" ausführe, dann klappts. Wenn ich dann wieder eine IP-Adresse eintrage, meldet er wieder :


mysql.rb:4:in `new': Can't connect to MySQL server on '192.168.0.181' (111) (Mysql::Error)
from mysql.rb:4


Muss ich die IP-Adresse noch in irgendeiner Weise initiieren, eigentlich nicht, oder? Ihr eine Variable zuzuweisen und dann diese einzubauen geht auch nicht.

Die IP-Adresse ist 100%ig richtig, der mysql server läuft auch.


Bitte um einen kleinen Tipp!

ciao

sim4000
27.01.2008, 13:17
Schau mal in der Datenbank "mysql" wie die Berechtigungen für den User gesetzt sind.
Das geht wie folgt:

use mysql;
select host, user from user;Da kommt bei mir folgendes raus:

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select host, user from user;
+-----------+------+
| host | user |
+-----------+------+
| % | gast |
| localhost | root |
+-----------+------+
2 rows in set (0.03 sec)
unter Host bedeutet % das alle Computer im Netzwerk Zugriff auf den MySQL-Server mit diesem User haben. Wobei denn localhost heißt, das nur von dem Rechner auf den Server zugegriffen werden kann, wo der Server auch läuft.

Das wäre die erste Möglichkeit warum es nicht geht. Hast du vielleicht ne Firewall auf dem Rechner laufen, der diesen Port (3306) blockt?
Poste bitte auch mal die Ausgabe von:

use mysql;
select host, user from db;
Lg, sim.

juan_
27.01.2008, 13:45
hi,



mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| localhost | debian-sys-maint |
| localhost | root |
| test0r | root |
+-----------+------------------+
3 rows in set (0.00 sec)


allerdings habe ich versucht, die DB von außen erreichbar zu machen, und hab
mit dem Befehl :


mysql> update user set Host='192.168.0.181';

rumgespielt und mich dabei scheibar ausgesperrt :)



mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

ich muss erstmal wieder reinkommen, dann melde ich mich :D

ciao

sim4000
27.01.2008, 13:49
Vielleicht hilft die ja das hier:

-[sim4000@kompaktes]-*-[13:56]-*-[2.6.22.13-0.3-default]
/dev/pts/1 (/srv/www/htdocs/websitev3) mysql_fix_privilege_tables --help
This script updates all the mysql privilege tables to be usable by
the current version of MySQL

Got a failure from command:
cat /usr/share/mysql/mysql_fix_privilege_tables.sql | /usr/bin/mysql --no-defaults --force --user=root --host=localhost --database=mysql
Please check the above output and try again.

Running the script with the --verbose option may give you some information
of what went wrong.

If you get an 'Access denied' error, you should run this script again and
give the MySQL root user password as an argument with the --password= option
:)

juan_
27.01.2008, 18:27
au. doppelpost. sorry

//edit:

häääää, was ist denn hier los... komisch. naja.

mysql geht wieder wie vorher. kann mich also nicht einloggen!

dein Skript schmeißt mir auch nur die Fehlermeldung :



test0r:/home/juan# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

zu

ciao

//edit2
muh, mysql wiede deinstalliert, installiert. kommt wieder die socketmeldung. was soll das mit denen? hat doch sonst auch immer geklappt...
.
.
.
EDIT (autom. Beitragszusammenführung) :
.
OK, Datenbank läuft wieder, Rechter via



update user set host='%' where user='NAME';
update db set host='%' where user='NAME';


auf



mysql> select Host, User from user;
+-----------+------------------+
| Host | User |
+-----------+------------------+
| % | dbuser |
| localhost | debian-sys-maint |
| localhost | root |
| test0r | root |
+-----------+------------------+
4 rows in set (0.00 sec)

gestzt, aber Ruby führt das externe Skript immer noch nicht aus. Siehe dazu die o.g Fehlermeldung!



Das wäre die erste Möglichkeit warum es nicht geht. Hast du vielleicht ne Firewall auf dem Rechner laufen, der diesen Port (3306) blockt?
Poste bitte auch mal die Ausgabe von:
Code:

use mysql;
select host, user from db;


nein, eine Firewall läuft nicht.
Hier die Ausgabe:


mysql> select host, user from db;
+------+--------+
| host | user |
+------+--------+
| % | dbuser |
+------+--------+
1 row in set (0.17 sec)


Vielen Dank.

ciao

sim4000
27.01.2008, 18:46
Also soweit ich das sehen kann, sieht es von den MySQL-Berechtigungen her alles gut aus.
Also müsste es an den Script liegen.
Von Ruby hab ich allerdings keine Ahnung.

Sry.

juan_
27.01.2008, 18:50
Danke soweit.

Hätte ja sein können, dass man vor der IP-Adresse noch irgendein Zusatz braucht, welcher die IP-Adresse initiiert und nicht Rubyspezifisch ist.
Naja, muss ja aber daran liegen, lokal funktionierts ja!


ciao

sim4000
27.01.2008, 19:33
Solange der MySQL-Server ganz normal auf dem Port 3306 läuft, brauchst du eigentlich keinen zusatz.
du könntest es noch mal so versuchen:
ip_adresse:3306Wobei ich bezweifele, das dass was bringt...

juan_
29.01.2008, 18:34
nein, so geht das leider nicht. egal. muss ich mich noch ein bisschen umschauen. vllt ist ja die Syntax bei externem Zugriff anders.

danke für deine Bemühungen!

ciao

//edit:
Lösung: in der my.cnf Config die bind-adress von "localhost" auf die interne / externe Serveripadresse ändern!