bash scriptben futó mysql elérés nem megy

 ( redman | 2012. június 14., csütörtök - 14:24 )

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

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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

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?

http://www.redman.hu

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

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

http://www.redman.hu

Esetleg egészítsd ki a szkriptedet strace/ltrace paranccsal.

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

É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 ?

.

Miért kapsz idegbajt attól?
--
unix -- több, mint kód. filozófia.
Life is feudal

Talán azért mert csak grep-pel is meg lehetne oldani, és nem kell hozzá a cat?

Valóban a cat felesleges mivolta okán.

{0} ok boto
boto ?

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

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 ?

Ezt:

socket=/var/lib/mysql/mysql.sock

http://www.redman.hu

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?

Igen, a java kód tomcat user nevében fut.
Ha belépek a console-ban tomcat néven, akkor lefut

http://www.redman.hu

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. :)

Ez egy jó ötlet volt, de sajnos ugyanaz a hibaüzenet.
Komolyan nem értem, hogy mi van...

http://www.redman.hu

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.

Ez lett a kimenet:

http://pastebin.com/8FmCEYUY

Nekem sajnos nem sokat mond.

http://www.redman.hu

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?

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

http://www.redman.hu

beletettem még a scriptbe, hogy
whoami > /tmp/who.txt

És a meglepődés:
root
a tartalma. :)

http://www.redman.hu

Amikor van jdbc, akkor miert is kinlodsz azzal, hogy execelsz valami processzt? Nemertem. http://stackoverflow.com/questions/1497569/how-to-execute-sql-script-file-using-jdbc
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

+1

topic nyitás óta gondolkodom, hogy miért.

+1

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

http://www.redman.hu

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