这很奇怪。我有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
答案 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