Hei,
Pyörittelen useampaa virtualhostia nginx-palvelimella. Jokainen hosti on chrootattu omaan kansioonsa (/home/vhosts/<vhost>). Homma pelittää muuten hyvin, mutta tämä estää mm. unix socketien käytön MySQL ja PHP välillä.
// Tämä toimii, koska PDO käyttää TCP/IP yhteyttä self::$instance = new PDO("mysql:host=127.0.0.1;dbname=", '', ''); // Tämä ei toimi, koska PDO käyttää unix socketteja self::$instance = new PDO("mysql:host=localhost;dbname=", '', '');
Alemmasta rivistä PHP valittaa:
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/run/mysqld/mysqld.sock)
Syy on selvä; PHP yrittää etsiä mysqld.sock-tiedostoa chrootin sisältä, mistä sitä ei tosiaankaan löydä.
Olen nyt pyörinyt ympäri Googlea, ja yrittänyt selvittää voiko MySQL:n pakottaa käyttämään TCP/IP yhteyttä vaikka yhteyttä luodessa käyttäisi host=localhost määritettä. Tietäiskö joku teistä viisaammista ratkaisua tähän?
Onko jokin syy käyttää nimeä localhost, kun osoite 127.0.0.1 kuitenkin on kaikkialla sama asia?
Ei erityisemmin, lähinnä vain häiritsee se, että asia "toimii puoliksi".
Itsellä ei ole koskaan tullut vastaan webhotellia, jossa joko vain 127.0.0.1 tai localhost toimisi, joten mietityttää miten muut ovat asian toteuttaneet.
Luo chrootteihin tuo /var/run/mysqld hakemisto ja liitä tuo oikea hakemisto siihen?
mount -o bind /var/run/mysqld /home/vhosts/<hosti>/var/run/mysqld
Aihe on jo aika vanha, joten et voi enää vastata siihen.