Пользователь моей базы данных существует, но я все еще получаю (HY000 / 2002): нет такого файла или каталога

23

Я пытаюсь установить форумы ванили на моем Mac, и для этого я только что создал базу данных и пользователь из командной строки mysql:

mysql> CREATE DATABASE vanilla;
Query OK, 1 row affected (0.00 sec)

mysql> create user 'vanilla_user3'@'localhost' IDENTIFIED BY 'vanilla_password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'vanilla_user3'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Поэтому я пытаюсь подключиться, используя следующий код:

$con=mysqli_connect("localhost","vanilla_user3","vanilla_password","vanilla");
if (mysqli_connect_errno($con)) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

но, к сожалению, я получаю сообщение об ошибке Warning: mysqli_connect(): (HY000/2002): No such file or directory in/Users/kramer65/Sites/vanilla/info.php on line 3 Failed to connect to MySQL: No such file or directory

Любая идея, где я ошибаюсь?

Теги:
macos
privileges

3 ответа

84
Лучший ответ

Хорошо, я только нашел решение. Проблема оказалась в том, что хост должен быть не localhost, а 127.0.0.1. Я всегда думал, что localhost и 127.0.0.1 были одинаковыми, но оказалось, что они разные.

Поэтому, возможно, в качестве подсказки для будущих пользователей, всегда используйте ip, когда вы сомневаетесь.

Я желаю вам прекрасного дня!

  • 9
    "Там нет места, как дома"
  • 2
    Ответ от Мохитмаянка правильный. Если localhost не работает, вам нужно указать PHP, где найти файл сокета mysql.
Показать ещё 3 комментария
9

У меня была та же проблема, но проблема была связана с файлом php.ini.

Мне пришлось отредактировать эти две строки в /etc/php.ini (или там, где находится ваш php.ini):

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

Перезапустите сервер Apache, чтобы убедиться, что изменения отражены.

sudo apachectl restart
  • 0
    Спасибо чувак..! :)
  • 1
    Это правильный ответ для использования сокета вместо TCP / IP.
Показать ещё 2 комментария
5

Скажем, ваш порт MAMP MySQL установлен на 8889, как и по умолчанию. Иногда localhost недостаточно, и в этом случае вы должны поместить туда порт MySQL, чтобы вы делали localhost:8889 или localhost:{whatever your MySQL port number is}. Я до сих пор не знаком с MySQL, поэтому я не знаю причину, но кому-то, кто недавно получил сообщение: Warning: mysqli::mysqli(): (HY000/2002): No such file or directory in... добавление номера порта MySQL на localhost было исправлением для меня.

  • 2
    В том, что я считаю ошибкой, localhost действительно должен иметь порт (даже если это значение по умолчанию 3306), добавленный к нему в параметре $ host, но никакое другое имя хоста не делает. Таким образом, вы должны использовать localhost: 3306 для параметра $ host. Другие имена хостов и IP-адреса будут использовать параметр $ port. Но параметр $ port игнорируется, если $ host равен localhost. Я считаю, что проблема связана с чем-то в PHPdoc для __construct (): «Когда это возможно, будут использоваться каналы вместо протокола TCP / IP».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню