Назад | Перейти на главную страницу

Не удается подключиться к серверу mysql (13) с помощью функции php

Я открыл все ссылки, которые результаты Google бросили мне в отношении этой ошибки MySQL. Я потратил часы, чтобы заставить это работать ...

У меня есть веб-сервер (apache in centos installed in host B, and want to connect to a MySQL server in host A) оба хоста находятся в одной подсети.

Я могу получить доступ к удаленному mysql с помощью CLI mysql -u root -h <ip> -p

но не могу подключиться к mysql с помощью функции PHP mysql_connect()

Я уже отключил SELINUX и system-config-firewall-tui и включен ниже синтаксис в /etc/my.cnf

  [client]
  port =3306
  socket = /var/lib/mysql/mysql.sock

Некоторые решения, найденные в Интернете, говорят мне ввести setbool связаны с selinux, но дело в том, что SELINUX уже отключен.

странно то, что я могу подключиться через CLI, но не через функцию php

также у меня есть php-mysql в обоих хозяевах


Вот мой main.php

<?php
mysql_connect('192.168.8.136','root','admin') or die (mysql_error());
echo "Connected to MySQL server";

mysql_select_db("web") or die (mysql_error());
echo "Connected to Database";
?>

вот мой /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld/log
id-file=/var/run/mysqld/mysqld.pid

статус selinux

SELinux status: disabled

netstat -atn tcp 0 0 0.0.0.0:3306 0.0.0.0:* Listen

ошибка, полученная на клиенте, на котором размещен apache:

[error] [client 127.0.0.1] PHP warning: mysql_connect(); cant connect to mysql server (13) in /var/www/html/main.php on line 2

Я мог получить доступ с сервера B из командной строки mysql, но я также не мог подключить свою удаленную базу данных через httpd - я знаю, что вы говорите, что selinux был отключен с обеих сторон, однако в моей ситуации стороне сервера httpd нужен selinux

setsebool httpd_can_network_connect_db=1 

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

у вас есть что-то подобное в my.cnf?

 bind-address            = 192.168.8.136

а в php у вас есть safe_mode или apache mod_security включен?

Проверьте настройку "host" корневого пользователя MySQL. Возможно, попробуйте с anyhost, 192.168.8.%, Localhost или www.domain.tld. Вероятно, неплохо было бы протестировать с другим пользователем, а не использовать root ...

Попробуйте эти шаги и посмотрите, изменится ли что-нибудь:

  1. Отредактируйте /etc/my.cnf и измените bind-address = 127.0.0.1 на IP-адрес вашего сервера Mysql.
  2. Разрешить пользователю root подключаться с любого хоста

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

Однако разрешать удаленный root-доступ крайне не рекомендуется, вам следует создать нового пользователя и дать ему только необходимые разрешения для определенной базы данных и использовать этого пользователя.

Обновление: сначала не заметил дату публикации, но будем надеяться, что это когда-нибудь поможет кому-то.

Используйте приведенный ниже код. Я тоже получил ответ.

setsebool -P httpd_can_network_connect=1

В CentOs 6 вы можете использовать следующее (без -P)

setsebool httpd_can_network_connect=1

Попробуйте, это должно сработать

  <?php
  // Mysql settings
  $user   = "root";
  $password = "admin";
  $database = "IP";
  $host   = "yourhost";
  mysql_connect($host,$user,$password);
  mysql_select_db($database) or die( "Unable to select database");
  ?>