mysqli连接问题

时间:2010-08-04 15:45:56

标签: php mysqli centos

这很奇怪。我有2个盒子,prod(192.168.0.1)和vm(192.168.0.30)。 Mysql数据库坐在prod上。 应用程序坐在虚拟机上。 从vm,如果我输入

mysql -u user -p -h 192.168.0.1 -D mydb

它连接可爱,所以端口打开并听取产品 但在应用程序中,我做

$db=new mysqli('192.168.0.1','user','mypass','mydb');

我得到了

Warning: mysqli::mysqli() [function.mysqli-mysqli]: (HY000/2003): Can't connect to 
MySQL server on '192.168.0.1' (13) in /var/www/vhosts/myapp/httpdocs/dstest.php 
on line 123

两个盒子都有完全相同的版本php,mysql,mysql.so,mysqli.so

有什么建议吗?

P.S。如果我尝试$ db = new mysqli('127.0.0.1',...但是如果我尝试$ db = new mysqli('localhost',...

)也会发生这种情况。 如果有帮助的话,请点击这里的my.cnf:

[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

max_connections = 500
max_user_connections = 150

key_buffer = 2048M

query_cache_limit=4M
query_cache_size=64M
table_cache=2048
tmp_table_size=64M
max_heap_table_size = 256M

# users buffers
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=1M

max_allowed_packet=16M

thread_cache=16
thread_concurrency=8
thread_cache_size=128
innodb_buffer_pool_size = 128M
myisam_sort_buffer_size = 128M

wait_timeout = 240
interactive_timeout = 240
max_allowed_packet=32M

[mysql.server]
user=mysql
basedir=/var/lib

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

3 个答案:

答案 0 :(得分:19)

检查here。它看起来与您的问题非常相似。

编辑:为后代添加了博客内容:

  

SQLSTATE[HY000] [2003] Can’t connect to MySQL server on ‘xxx.xxx.xxx.xxx’ (13)

     

我希望在尝试时更快地在Google中找到的一件事   弄清楚为什么PHP脚本拒绝连接到远程MySQL服务器   发出错误SQLSTATE [HY000] [2003]无法连接到MySQL服务器   'xxx.xxxx.xxx.xxx'(13)

     

我能够从本地shell连接,所以首先想到的是   最近的Zend Framework升级出了问题,但过了一段时间   我发现答案非常简单 - SELinux正在阻止远程攻击   来自Apache Web服务器执行的PHP脚本的连接。错误   错误消息末尾的代码(13)表示“权限被拒绝”,所以   这表明你是否有类似的问题。

     

无论如何,以root身份登录并执行setsebool -P httpd_can_network_connect=1   使它工作。

     

当然,请三思而后行,因为您使Web服务器安全性降低,   所以,除非你确定需要它,否则不要这样做。

答案 1 :(得分:0)

如果该服务器是本地服务器,请先尝试:

$db=new mysqli('localhost','user','mypass','mydb'); 

而不是

$db=new mysqli('192.168.0.1','user','mypass','mydb');

这对我有用。

答案 2 :(得分:-1)

通过运行以下命令,通过命令行重新启动mysql服务:

service mysql restart