Connexion au serveur MySQL distant en utilisant PHP
-
20-09-2019 - |
Question
Je tente de se connecter à un serveur MySQL distant de ma machine locale VirtualHost en utilisant le code suivant:
$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") or die(mysql_error());
mysql_select_db($dbname, $conn) or die(mysql_error());
Mon problème est que je suis incapable de se connecter localement, recevoir l'erreur:
Impossible de se connecter au serveur MySQL sur 'xxx.xxx.xxx.xxx' (10060)
Ce n'est pas le cas quand je télécharge le même fichier PHP sur le serveur. Je suis en mesure d'interroger la base de données sans problème.
Je suis incapable de se connecter via la ligne de commande non plus, mais je peux accéder à cPanel, qui exclut la possibilité de mon IP étant interdit par inadvertance.
Mon serveur local est en cours d'exécution PHP 5.2.9, le serveur distant 5.2.12
La solution
- pare-feu du serveur doit être mis en place pour permettre les connexions incomming sur le port 3306
- vous devez avoir un utilisateur MySQL qui est autorisé à se connecter à partir
%
(tout hôte) (voir manuel pour plus de détails)
Le problème actuel est le premier, mais juste après le résoudre, vous aurez probablement le second.
Autres conseils
Il est très facile de se connecter à distance MySQL Server à l'aide de PHP, ce que vous avez à faire est:
-
Créer un utilisateur MySQL serveur distant.
-
Donne le privilège complet à l'utilisateur.
-
Connectez-vous à l'aide du code PHP serveur (échantillon donné ci-dessous)
$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
Je viens de résoudre ce genre de problème. Ce que j'ai appris est:
- vous devrez modifier le
my.cnf
et définissez lebind-address = your.mysql.server.address
sous[mysqld]
- commenter champ skip-réseau
- restart mysqld
-
vérifier si elle est en cours d'exécution
mysql -u root -h your.mysql.server.address –p
-
créer un utilisateur (usr ou quoi que ce soit) avec% comme domaine et lui accorder l'accès à la base de données en question.
mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
-
pare-feu ouvert pour le port 3306 (vous pouvez utiliser iptables. Assurez-vous d'ouvrir le port pour eithe reveryone, ou si vous êtes en securety serré, puis autoriser uniquement l'adresse du client)
- pare-feu de redémarrage / iptables
vous devriez pouvoir maintenant se connecter former serveur mysql votre script serveur php client.
peut-être pas la réponse à question.But affiche de cette mai utile aux personnes dont le visage même situation avec moi:
Le client dispose de deux cartes réseau, un sans fil et un normal.
Le ping au serveur peut être succeed.However telnet serverAddress 3306
échouerait.
Et se plaindrait
Impossible de se connecter au serveur MySQL sur 'xxx.xxx.xxx.xxx' (10060)
lorsque vous essayez de vous connecter à server.So I interdit les cartes réseau normales.
Et telnet serverAddress 3306
essayé works.And alors fonctionner lorsque la connexion au serveur MySQL.