我打开谷歌结果给我的每一个关于这个MySQL错误的链接。 我一直花费数小时才能完成这个工作。
我有一个Web服务器(apache in centos installed in host B, and want to connect to a MySQL server in host A)
两台主机都在同一个子网中。
我可以使用CLI访问远程mysql 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
networking中find的一些解决scheme告诉我要input与selinux关联的setbool
,但事实是,SELINUX已经被禁用了。
奇怪的是,我可以连接通过CLI,但不是在PHPfunction
另外,我在两个主机都有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
启用?
检查你的MySQL根用户“主机”设置。 也许尝试使用anyhost,192.168.8。%,localhost或“www.domain.tld”。 用另一个用户testing而不是使用root可能是一个好主意…
试试这些步骤,看看它是否改变了一切:
bind-address = 127.0.0.1
更改为您的Mysql服务器的IP。 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
但是,build议不允许远程root用户访问,您应该创build一个新用户,并且只给它一个特定数据库所需的权限并使用该用户。
更新:一开始没有注意到发布date,但希望有一天能帮助别人。
使用下面的代码。 我也得到了答案。
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"); ?>