[ruby]Kann von "extern" nicht auf DB zugreifen!

juan_

juan_

König
Hoi,


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

Code:
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
 
Schau mal in der Datenbank "mysql" wie die Berechtigungen für den User gesetzt sind.
Das geht wie folgt:
Code:
use mysql;
select host, user from user;
Da kommt bei mir folgendes raus:
Code:
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:
Code:
use mysql;
select host, user from db;
Lg, sim.
 
hi,

Code:
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 :
Code:
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
 
Vielleicht hilft die ja das hier:
Code:
-[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
:)
 
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 :
Code:
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

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

auf

Code:
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:
Code:
mysql> select host, user from db;
+------+--------+
| host | user   |
+------+--------+
| %    | dbuser | 
+------+--------+
1 row in set (0.17 sec)

Vielen Dank.

ciao
 
Zuletzt bearbeitet:
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.
 
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
 
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:
Code:
ip_adresse:3306
Wobei ich bezweifele, das dass was bringt...
 
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!
 
Zuletzt bearbeitet:

Ähnliche Themen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

JBidWatcher: Problem bei loading Auctions in Verbindung mit mySQL

Debian Routing Problem

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

Zurück
Oben