mysqli :: mysqli (): (HY000 / 2002): Не удается подключиться к локальному серверу MySQL через сокет «MySQL» (2)

Я получаю эту ошибку, когда пытаюсь подключиться к базе данных mysql, используя php mysqli class. Используя следующий код:

$db = new MySQLi("localhost","kamil","*****"); if (mysqli_connect_errno()) { echo "An error occured. Please try again later."; exit(); } 

пароль * для обеспечения безопасности.

Я создал пользователя kamil со всеми привилегиями на внешний IP-адрес и localhost. Когда я запускаю: select user,host from mysql.user он правильно отобразит этих двух пользователей.

Я провел некоторое исследование и использовал этот тест: https://stackoverflow.com/a/2183134/1839439, чтобы узнать, к чему он подключается. Как оказалось, он может подключаться только к 127.0.0.1 и 127.0.0.1:3306 который является localhost, однако, когда я поставляю localhost он выдает эту ошибку.

Мой вопрос в том, почему это только позволяет мне подключаться к БД, используя адрес localhost ip, а не имя или внешний ip. Нужен ли мне другой хост, если я хочу использовать mysql на веб-сайте или я могу использовать 127.0.0.1 ?

РЕДАКТИРОВАТЬ:
файл hosts

 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 raspberrypi 


Результаты поиска пользователя Mysql для этого пользователя:

 | kamil | 109.255.177.28 | | kamil | localhost | 

Solutions Collecting From Web of "mysqli :: mysqli (): (HY000 / 2002): Не удается подключиться к локальному серверу MySQL через сокет «MySQL» (2)"

Когда вы используете только «localhost», клиентская библиотека MySQL пытается использовать сокет домена Unix для подключения вместо соединения TCP / IP. Ошибка сообщает вам, что сокет, называемый MySQL , не может быть использован для соединения, вероятно, потому, что он не существует (номер ошибки 2).

Из документации MySQL :

В Unix программы MySQL обрабатывают имя хоста localhost специально таким образом, который, вероятно, отличается от ожидаемого по сравнению с другими сетевыми программами. Для соединений с localhost программы MySQL пытаются подключиться к локальному серверу с помощью файла сокета Unix. Это происходит, даже если задана опция -port или -P для указания номера порта. Чтобы клиент установил TCP / IP-соединение с локальным сервером, используйте -host или -h, чтобы указать значение имени узла 127.0.0.1 или IP-адрес или имя локального сервера. Вы также можете указать протокол подключения явно, даже для localhost, с помощью опции –protocol = TCP.

Есть несколько способов решить эту проблему.

  1. Вы можете просто использовать TCP / IP вместо Unix-сокета. Вы сделаете это, используя 127.0.0.1 вместо localhost при подключении. Однако сокет Unix может быть быстрее и безопаснее.
  2. Вы можете изменить сокет в php.ini : откройте файл конфигурации MySQL my.cnf чтобы найти, где MySQL создает сокет, и задайте mysqli.default_socket PHP этому пути. В моей системе это /var/run/mysqld/mysqld.sock .
  3. Настройте сокет непосредственно в скрипте PHP при открытии соединения. Например:

     $db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock') 

Если это проблема с PHP, вы можете просто изменить конфигурационный файл php.ini везде, где он находится, и обновить настройки для PORT / SOCKET-PATH и т. Д., Чтобы подключиться к серверу.

В моем случае я открыл файл php.ini и сделал

 mysql.default_socket = /var/run/mysqld/mysqld.sock mysqli.default_socket = /var/run/mysqld/mysqld.sock 

И это сработало сразу. Должен признаться, я принял намек на принятый ответ @Joni

Если «localhost» не работает, а 127.0.0.1. Убедитесь, что ваш локальный файл hosts указывает на правильное местоположение. (/ etc / hosts для linux / mac, C: \ system32 \ drivers \ etc \ hosts для Windows).

Кроме того, убедитесь, что вашему пользователю разрешено подключаться к любой базе данных, которую вы пытаетесь выбрать.

Проверьте следующий файл

 %SystemRoot%\system32\drivers\etc\host 

Строка, которая связывает имя хоста с ip, вероятно, отсутствует строка, которая связывает их togather

 127.0.0.1 localhost 

Если данная строка отсутствует. Добавить строку в файл


Не могли бы вы также проверить свою пользовательскую таблицу базы данных MySQL и сообщить нам значение столбца хоста для пользователя, который вы используете. У вас должна быть привилегия пользователя как для хоста «127.0.0.1», так и для «localhost» и использовать%, поскольку он является диким символом для общего имени хоста.

[RESOLVED]: Решение, которое мы интегрировали, мы увеличили пространство на сервере, и оно было разрешено.

Не знаю точную причину, но мы это разрешаем.