MySQL-yhteyksien salliminen localhostin ulkopuolelta
Kirjoittanut J-P Julkaistu 12.2.2009
Tämän kertainen ComiaTipsi ei ole niinkään varsinaista ohjelmointi vaan enemmänkin tietokantapalvelimen ylläpitoa. Useimmat meistä tietokantakoodereista kuitenkin joutuvat tekemisiin myös konfiguraatioiden kanssa, varsinkin testiympäristössä. Tässäpä siis pieni vinkki siihen, mikä voi olla vikana jos softasi ei saa yhteyttä tietokantapalvelimeen.
Varsin yleinen ongelma MySQL-tietokannan käytössä on, että asennuksen yhteydessä tietokantapalvelin on asetettu hyväksymään yhteyksiä vain siltä tietokoneelta jolle tietokanta on asennettu. Tämä on tilanne yleensä vasta-asennetussa MySQL-palvelimessa.
Ongelma on helppo paikallistaa komentorivillä esimerkiksi komentoriviltä.
MySQL hyväksyy vain paikallisia yhteyksia jos vain ensimmäisellä seuraavista komennoista saat yhteyden tietokantaan suorittamalla nämä sillä koneella, mihin MySQL on asennettu.
mysql -u <käyttäjätunnus> -p mysql -h <tietokannan IP-osoite> -u <käyttäjätunnus> -p
Ongelma korjataan kommentoimalla my.cnf -tiedostosta rivi:
bind-address = 127.0.0.1
Tarpeellinen my.cnf tiedosto löytyy yleensä Linuxeissa kansiosta /etc.
Rivin kommentointi antaa MySQL palvelimelle luvan vastaanottaa yhteyspyyntöjä myös muista IP-osoitteista kuin paikalliselta koneelta. Jos haluat rajata sallitut yhteydet koskemaan vain ja ainoastaan jotain tiettyä IP-osoitetta, voit vaihtaa halutun osoitteen localhostin osoitteen 127.0.0.1 tilalle. MySQL:n omien foorumeiden mukaan osoitteita voi olla vain yksi. Et voi siis tehdä asetusta joka sallisi yhteydet vain osoitteista osoitteista 192.168.1.75 ja 192.168.3.14. Rajoitus on yksi osoite tai kaikki osoitteet.
Muutoksen tekemisen jälkeen on MySQL:n asetukset ladattava uudelleen esimerkiksi uudelleenkäynnistämällä palvelu (/etc/init.d/mysql restart).
Jos yhteys ei vieläkään toimi, et pääse käsittelemään my.cnf tiedostoa, tai muuten vain haluat kokeilla yksinkertaisinta vaihtoehtoa ensiksi, tarkista että käyttäjällä jona yritätä MySQL palvelimelle kirjautua on oikeus kirjautua siltä koneelta mistä yrität yhteyttä avata.
Voit tarkistaa asian kirjautumalla suorittamalla seuraavan SQL-komennon kannan ylläpitäjänä:
SELECT user,host from mysql.user WHERE user='<käyttäjätunnus>';
Tuloksen host-sarakkeesta näet miltä koneilta käyttäjän sallitaan MySQL-palvelimelle kirjautua. Host voi olla koneen nimi, IP-osoite tai %-merkki. %-merkki tarkoittaa, että yhteyden ottaminen on sallittu kaikilta koneilta. Oikeudet voit antaa esimerkiksi seuraavalla SQL-komennolla:
GRANT ALL ON *.* TO '<käyttäjä>'@'<kone>' IDENTIFIED BY '<salasana>';
Edellinen komento antaa kaikki oikeudet kaikkiin tietokantoihin joten kannattaa vahvasti harkita kohdan ALL ON *.* muuttamista rajatumpaan muotoonsa.



