Hlavní navigace

Magie s mysql

Leoš Literák

Někdy se vám stane, že probdíte několik nocí při hledání zapeklitého problému. Marně. Všechny vaše pokusy míří do prázdna. A pak k tomu přijde někdo jiný a vy řeší to za pár sekund. A právě takovou to magií se bude zabývat tento občasník.

Dnes na téma instalace mysql.

Pokud si nainstalujete mysql z rpm od Redhatu, asi vás překvapí jedna nová vlastnost. Nikdo kromě roota nemůže komunikovat s databází. Přihlásíte se do mysql jako root, vše jede. Přihlásíte se jako uživatel, nepustí vás to dovnitř. Z php skriptu dostanete hlášku „Can't conect to localhost through socket ..“. Řeknete si, že máte špatně nastavená práva. Začnete studovat manuál a experimentovat. Bezvýsledně. Znovu si přečtete manuál a zjistíte, že musíte nahrát tabulky s právy příkazem ‚mysqladmin reload‘. Zase nic. Pak náhodou zadáte místo localhostu jméno serveru nebo IP adresu a ono to jede. Protože jste šťoura jako já, nespokojíte se s tímto řešením a chcete to mít perfektní.

Tipnete, že problém bude asi v nastavení DNS. Nastudujete a konečně pochopíte principy tohoto protokolu, vše krásně nakonfigurujete, spustíte mysql klienta a zase nic. Jsou tři ráno, za dvě hodiny máte vstávat, tak si jdete zdřímnout. Psychicky jste na dně. Další den prohledáváte internet, jestli tam někde není řešení. A najdete jej v archivu konference linux. Jaké je?

chmod 755 /var/lib/mysql

Při komunikaci s databází se používají sokety. Pokud přistupujete zvnějšku, otevře se TCP spojení se serverem na soketu 3306. Proto přístup funguje, pokud zadáte jméno hostitele nebo IP adresu. Pokud ale nezadáte žádné jméno nebo zadáte localhost, komunikace probíhá přes soket /var/lib/mysql/mys­ql.sock. Tento soket má sice nastavena práva na čtení i zápis pro každého, jenže práva adresáře, ve kterém je umístěn, jsou poněkud paranoidně restriktivní. Proto běžný uživatel nemůže komunikovat s databází.

Našli jste v článku chybu?