Když použijete pouze "localhost", klientská knihovna MySQL se pokusí použít pro připojení soket domény Unix místo připojení TCP/IP. Chyba vám říká, že soket s názvem MySQL
, nelze použít k vytvoření připojení, pravděpodobně proto, že neexistuje (chyba číslo 2).
Na Unixu programy MySQL zacházejí s názvem hostitele localhost speciálně, v away, který se pravděpodobně liší od toho, co očekáváte ve srovnání s jinými programy založenými na síti. Pro připojení k localhost se programy MySQL pokoušejí připojit k místnímu serveru pomocí souboru soketu Unix. K tomu dochází, i když je zadána volba --port nebo -P pro zadání čísla portu. Chcete-li zajistit, aby klient vytvořil připojení TCP/IP k místnímu serveru, použijte --host nebo -h k zadání hodnoty názvu hostitele 127.0.0.1 nebo IP adresy nebo názvu místního serveru. Můžete také explicitně specifikovat protokol připojení, a to i pro localhost, pomocí volby --protocol=TCP.
Existuje několik způsobů, jak tento problém vyřešit.
- Místo Unixového socketu můžete použít TCP/IP. Udělali byste to pomocí
127.0.0.1
místolocalhost
když se připojíte. Unixový socket by však mohl být rychlejší a bezpečnější. - Zásuvku můžete změnit v
php.ini
:otevřete konfigurační soubor MySQLmy.cnf
zjistit, kde MySQL vytváří socket, a nastavit PHPmysqli.default_socket
na tu cestu. V mém systému je to/var/run/mysqld/mysqld.sock
. -
Nakonfigurujte socket přímo v PHP skriptu při otevírání spojení. Například:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')