Я открыл все ссылки, которые результаты 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 ...
Попробуйте эти шаги и посмотрите, изменится ли что-нибудь:
bind-address = 127.0.0.1
на IP-адрес вашего сервера Mysql.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");
?>