2010-08-04 5 views
3

C'est bizarre. J'ai 2 boîtes de centos, prod (192.168.0.1) et vm (192.168.0.30). La base de données Mysql se trouve sur prod. L'application se trouve sur vm. De vm, si je tapeproblème de connexion mysqli

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

il se connecte belle, si le port est ouvert et à l'écoute sur prod mais dans l'application, je ne

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

et je reçois

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 

Les deux boîtes ont exactement les mêmes versions php, mysql, mysql.so, mysqli.so

Un conseil?

P.S. Cela arrive aussi si j'essaie $ db = new mysqli ('127.0.0.1', ... MAIS PAS si j'essaie $ db = new mysqli ('localhost', ...

au cas où ça aide, voici my.cnf sur prod.

[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

Avez-vous essayé de vérifier votre pare-feu? Peut-être qu'une règle bloque le vm. – Kiva

+0

ne peut pas être un pare-feu si je peux le faire sur la ligne de commande, peut-il? –

Répondre

18

Vérifiez here Il ressemble beaucoup à votre problème

Edit:. contenu blog ajouté pour la postérité:

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

L'une des choses que je voudrais avoir trouvé dans Google plus vite en essayant de savoir pourquoi script PHP refuse de se connecter au serveur MySQL émission d'une erreur SQLSTATE [HY000] [2003] Impossible de se connecter au serveur MySQL sur « xxx.xxxx.xxx.xxx » (13)

Je suis en mesure de se connecter depuis shell local, donc d'abord pensé si quelque chose de mal avec mise à jour récente de Zend Framework, mais après un certain temps je me suis dit que la réponse est très simple - SELinux bloquait les connexions distantes des scripts PHP exécutés par le serveur web Apache. L'erreur code (13) à la fin du message d'erreur signifie "permission refusée", donc c'est l'indication pour voir si vous avez un problème similaire ou non.

Quoi qu'il en soit, connectez-vous en tant que root et faites setsebool -P httpd_can_network_connect=1 pour le faire fonctionner. Bien sûr, réfléchissez-y à deux fois car vous rendez le serveur Web un peu moins sécurisé, alors ne le faites pas à moins d'être certain de l'avoir besoin.

+1

Vous, monsieur, êtes un gentleman et un érudit. C'est exactement ce qui n'allait pas, et le correctif suggéré a travaillé un charme. Je vous remercie. –

+2

Sanglante SELINUX. – Chris

+0

Aucune idée pourquoi, mais tout d'un coup je devais le faire avec mon centos 7 ainsi – pun

0

Si ce serveur est local, essayez cette première:

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

au lieu de

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

Cela a fonctionné pour moi.