Sziasztok!
Van egy Linuxon futó Java program, ami futása során lefuttat egy bash scriptet.
A scriptben egy eygszerű mysql parancs van:
/usr/bin/mysql -u user -pjelszo adatbazis < /tmp/valamilyen.sql
A scriptet kézzel lefuttatva tökéletesen működik. A valamilyen.sql simán lefut.
Ha a Java programból hívódik, akkor viszont ezt az üzenetet kapom a fent sql kérés error kimenetéről:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Próbálkoztam azzal is, hogy -h 127.0.0.1 illetve -h 192.168.x.x is beiktattam a parancsba, de akkor sem ment.
A felhasználónak van joga lefuttatni a dolgokat, hiszen kézzel megy.
Mi lehet a probléma?
Üdv: redman
- 4948 megtekintés
Hozzászólások
Környezeti változó beállítások rosszak.
A sock-et fájlodat rossz helyen keresi, ha megnézed:
ls /var/lib/mysql/mysql.sock
ezt fogod kapni:
ls: /var/lib/mysql/mysql.sock nem érhető el: Nincs ilyen fájl vagy könyvtár
- A hozzászóláshoz be kell jelentkezni
Alapból van ilyen, tehát csak a java program futásakor nem látszik?
Hogyan lehet ezt on-the-fly csak a script futásáig tudatni vele, hogy már pedig az a fájl ott van?
- A hozzászóláshoz be kell jelentkezni
Ha ott van socket fájlod és ő ott keresi akkor mennie kellene.
Próbáld így, hátha beszédesebb:
--debug[=debug_options], -# [debug_options]
Write a debugging log. A typical debug_options string is
'd:t:o,file_name'. The default is 'd:t:o,/tmp/mysql.trace'.
Szerk:
Erre mit mond:
ls /var/run/mysqld/mysqld.sock
- A hozzászóláshoz be kell jelentkezni
Option 'debug' used, but is disabled :(
Gondolom nincs belefordítva a mysql-be. Újrafordítani meg nincs lehetőség
# ls /var/run/mysqld/mysqld.sock
/var/run/mysqld/mysqld.sock: No such file or directory
- A hozzászóláshoz be kell jelentkezni
Esetleg egészítsd ki a szkriptedet strace/ltrace paranccsal.
- A hozzászóláshoz be kell jelentkezni
Erre mit kapsz?
cat /etc/mysql/my.cnf | grep socket
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
socket = /var/run/mysqld/mysqld.sock
socket = /var/run/mysqld/mysqld.sock
socket = /var/run/mysqld/mysqld.sock
- A hozzászóláshoz be kell jelentkezni
Én konkrétan idegbajt :]
grep socket /etc/mysql/my.cnf
(Hozzászólásom "OFF" mivoltáért elnézéseteket kérem.)
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
.
- A hozzászóláshoz be kell jelentkezni
Miért kapsz idegbajt attól?
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Talán azért mert csak grep-pel is meg lehetne oldani, és nem kell hozzá a cat?
- A hozzászóláshoz be kell jelentkezni
Valóban a cat felesleges mivolta okán.
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
Világos, hogy cat nélkül is megkapod az eredményt. A kérdés arra vonatkozott, hogy ezen miért kell idegeskedni? Engem például hidegen hagyott, hogy nem az elegánsabb lehetőséggel élt.
--
unix -- több, mint kód. filozófia.
Life is feudal
- A hozzászóláshoz be kell jelentkezni
Jogos. (Okozhatta a trollhajlamom felszínre törését, hogy gyakran látom konkrétan ugyanezt a "hibát" és általában hiába javítom ki...)
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Ha ez: http://hup.hu/node/115425#comment-1470362 mégsem oldotta volna meg.
A java-t futtató user nevében console-ból sikerül kapcsolódni?
- A hozzászóláshoz be kell jelentkezni
Igen, a java kód tomcat user nevében fut.
Ha belépek a console-ban tomcat néven, akkor lefut
- A hozzászóláshoz be kell jelentkezni
Próbáld meg így:
/usr/bin/mysql -S /var/lib/mysql/mysql.sock -u user -pjelszo adatbazis
Több instance esetén a cli szokott olyat kínlódni, hogy lokál db esetén socketet, távolról kapcsolódás esetén a portot meg kell adni neki. Lehet, hogy a Java miatt szükséges lehet a socket megadása.
Próba cseresznye, tipp, nem garancia. :)
- A hozzászóláshoz be kell jelentkezni
Ez egy jó ötlet volt, de sajnos ugyanaz a hibaüzenet.
Komolyan nem értem, hogy mi van...
- A hozzászóláshoz be kell jelentkezni
Akkor még egyszer leírom a szegény ember debugját:
strace /usr/bin/mysql -u user -pjelszo adatbazis < /tmp/valamilyen.sql
ill.
ltrace /usr/bin/mysql -u user -pjelszo adatbazis < /tmp/valamilyen.sql
A kimenetet a visszafele erdemes olvasni.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Ott van benne a hiba:
connect(3, {sa_family=AF_FILE, path="/var/lib/mysql/mysql.sock"...}, 110) = -1 ENOENT (No such file or directory)
Azaz tényleg nincs ott a socket, ahol keresi a script. Nem lehet, úgy egészen véletlenül, hogy a /var/run/mysql/mysqld.sock a helyes megoldás?
A
find -L /var -type s
mit mond erről?
- A hozzászóláshoz be kell jelentkezni
Ott van a fájl, de látszólag nincs joga hozzá:
root# find -L /var -type s
/var/lib/mysql/mysql.sock
/var/run/dbus/system_bus_socket
tomcat# find -L /var -type s
find: /var/spool/cron: Permission denied
find: /var/lost+found: Permission denied
find: /var/empty/sshd: Permission denied
find: /var/cache/samba/winbindd_privileged: Permission denied
find: /var/lock/lvm: Permission denied
find: /var/lib/heartbeat/pengine: Permission denied
find: /var/lib/heartbeat/crm: Permission denied
find: /var/lib/heartbeat/cores/root: Permission denied
find: /var/lib/heartbeat/cores/hacluster: Permission denied
find: /var/lib/heartbeat/cores/nobody: Permission denied
/var/lib/mysql/mysql.sock
find: /var/lib/mysql/mysql: Permission denied
find: /var/lib/mysql/test: Permission denied
find: /var/log/samba: Permission denied
find: /var/run/lvm: Permission denied
find: /var/run/sudo: Permission denied
find: /var/run/heartbeat/crm: Permission denied
/var/run/dbus/system_bus_socket
A feltöltött scriptben lefuttatva viszont csak ez jelenik meg.
/var/run/dbus/system_bus_socket
- A hozzászóláshoz be kell jelentkezni
beletettem még a scriptbe, hogy
whoami > /tmp/who.txt
És a meglepődés:
root
a tartalma. :)
- A hozzászóláshoz be kell jelentkezni
Amikor van jdbc, akkor miert is kinlodsz azzal, hogy execelsz valami processzt? Nemertem. http://stackoverflow.com/questions/1497569/how-to-execute-sql-script-fi…
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
+1
topic nyitás óta gondolkodom, hogy miért.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
A kérdés jogos, de itt nem ez a lényeg. Ez egy általános script fájl, amit a user feltölt a kis felületén keresztül és megjavul neki minden a rendszerben.
Ebben a fájlban mindenfélét le lehet futtatni (nem csak SQL-t), amit a felhasználónak nem kell látnia.
Csak most egy sql módosítás kéne, amit nem a felhasználó felületébe kell belefejleszteni (mert ez egyedi és egyszeri módosítás).
üdv: redman
- A hozzászóláshoz be kell jelentkezni
Akkor fogod, belepsz rootkent, es megcsinalod. Ha eddig boldog voltal vele, illetve ezutan is boldog leszel vele, akkor most miert kell kinlodni vele... Mazochista.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni