Когато използвате само "localhost", MySQL клиентската библиотека се опитва да използва Unix домейн сокет за връзката вместо TCP/IP връзка. Грешката ви казва, че сокетът, наречен MySQL
, не може да се използва за осъществяване на връзката, вероятно защото не съществува (грешка номер 2).
В Unix MySQL програмите третират името на хоста localhost специално, което вероятно е различно от това, което очаквате в сравнение с други мрежови програми. За връзки към локален хост, MySQL програмите се опитват да се свържат с локалния сървър чрез използване на Unix файл на сокет. Това се случва дори ако е дадена опция --port или -P за указване на номер на порт. За да сте сигурни, че клиентът прави TCP/IP връзка с локалния сървър, използвайте --host или -h, за да посочите стойност на име на хост от 127.0.0.1 или IP адреса или името на локалния сървър. Можете също така изрично да посочите протокола за свързване, дори за локален хост, като използвате опцията --protocol=TCP.
Има няколко начина за решаване на този проблем.
- Можете просто да използвате TCP/IP вместо Unix сокета. Можете да направите това, като използвате
127.0.0.1
вместоlocalhost
когато се свържете. Unix сокетът обаче може да бъде по-бърз и по-безопасен за използване. - Можете да промените сокета в
php.ini
:отворете конфигурационния файл на MySQLmy.cnf
за да намерите къде MySQL създава сокета и задайтеmysqli.default_socket
на PHP към този път. В моята система това е/var/run/mysqld/mysqld.sock
. -
Конфигурирайте сокета директно в PHP скрипта, когато отваряте връзката. Например:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')