Conectarse al servidor MySQL remoto usando PHP

Estoy intentando conectarme a un servidor MySQL remoto desde mi máquina virtual virtual usando el siguiente código:

$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") or die(mysql_error()); mysql_select_db($dbname, $conn) or die(mysql_error()); 

Mi problema es que no puedo conectarme localmente, recibiendo el error:

No se puede conectar al servidor MySQL en ‘xxx.xxx.xxx.xxx’ (10060)

Este no es el caso cuando cargo el mismo archivo PHP en el servidor. Puedo consultar la base de datos sin ningún problema.

Tampoco puedo conectarme a través de la línea de comandos, pero puedo acceder a cPanel, lo que excluye la posibilidad de que mi IP sea prohibida accidentalmente.

Mi servidor local ejecuta PHP 5.2.9, el servidor remoto 5.2.12

  • el firewall del servidor debe configurarse para habilitar las conexiones entrantes en el puerto 3306
  • debe tener un usuario en MySQL que pueda conectarse desde % (cualquier host) (consulte el manual para obtener más información)

El problema actual es el primero, pero inmediatamente después de resolverlo, es probable que obtenga el segundo.

Es muy fácil conectar un servidor MySQL remoto usando PHP, lo que tienes que hacer es:

  1. Crear un usuario MySQL en el servidor remoto.

  2. Dar privilegio completo al usuario.

  3. Conéctese al servidor usando el código PHP (muestra dada a continuación)

 $link = mysql_connect('your_my_sql_servername or IP Address', 'new_user_which_u_created', 'password'); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_select_db('sandsbtob',$link) or die ("could not open db".mysql_error()); // we connect to localhost at port 3306 

Acabo de resolver este tipo de problema. Lo que he aprendido es:

  1. Tendrás que editar my.cnf y establecer bind-address = your.mysql.server.address en [mysqld]
  2. comentar campo de skip-networking
  3. reiniciar mysqld
  4. comprobar si se está ejecutando

     mysql -u root -h your.mysql.server.address –p 
  5. crea un usuario (usr o cualquier cosa) con% como dominio y otórgale acceso a la base de datos en cuestión.

     mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION; 
  6. abra el cortafuegos para el puerto 3306 (puede usar iptables. asegúrese de abrir el puerto para todos los usuarios, o si está seguro, solo permita la dirección del cliente)

  7. reiniciar firewall / iptables

deberías poder ahora conectar el servidor de mysql del script del servidor cliente php.

Esta puede no ser la respuesta a la pregunta del póster. Pero esto puede ser útil para las personas que enfrentan la misma situación conmigo:

El cliente tiene dos tarjetas de red, una inalámbrica y una normal. El ping al servidor puede tener éxito. Sin telnet serverAddress 3306 fallará. Y se quejaría

No se puede conectar al servidor MySQL en ‘xxx.xxx.xxx.xxx’ (10060)

cuando bash conectarme al servidor. Así que prohibí los adaptadores de red normales. Y probado telnet serverAddress 3306 funciona. Y luego funciona cuando se conecta al servidor MySQL.