Kiedy używasz tylko "localhost", biblioteka klienta MySQL próbuje użyć gniazda domeny Unix do połączenia zamiast połączenia TCP/IP. Błąd informuje, że gniazdo o nazwie MySQL
, nie można użyć do nawiązania połączenia, prawdopodobnie dlatego, że nie istnieje (błąd nr 2).
W systemie Unix programy MySQL traktują nazwę hosta localhost w sposób szczególny, co prawdopodobnie różni się od oczekiwanego w porównaniu z innymi programami sieciowymi. W przypadku połączeń z hostem lokalnym, programy MySQL próbują połączyć się z serwerem lokalnym przy użyciu pliku gniazda uniksowego. Dzieje się tak nawet wtedy, gdy podano opcję --port lub -P w celu określenia numeru portu. Aby upewnić się, że klient nawiązuje połączenie TCP/IP z serwerem lokalnym, użyj opcji --host lub -h, aby określić wartość nazwy hosta 127.0.0.1 lub adres IP lub nazwę serwera lokalnego. Możesz również jawnie określić protokół połączenia, nawet dla hosta lokalnego, używając opcji --protocol=TCP.
Jest kilka sposobów rozwiązania tego problemu.
- Możesz po prostu użyć protokołu TCP/IP zamiast gniazda uniksowego. Zrobiłbyś to za pomocą
127.0.0.1
zamiastlocalhost
kiedy się połączysz. Gniazdo uniksowe może być jednak szybsze i bezpieczniejsze w użyciu. - Możesz zmienić gniazdo w
php.ini
:otwórz plik konfiguracyjny MySQLmy.cnf
aby dowiedzieć się, gdzie MySQL tworzy gniazdo i ustawićmysqli.default_socket
PHP do tej ścieżki. W moim systemie to/var/run/mysqld/mysqld.sock
. -
Skonfiguruj gniazdo bezpośrednio w skrypcie PHP podczas otwierania połączenia. Na przykład:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')