web-dev-qa-db-fra.com

autoriser l'accès mysql à distance (via webmin ou shell)

Spec: Ubuntu 14.04 webmin/virtualmin 1.791

J'utilise le code suivant pour tester la connexion à la base de données mysql à distance:

<?php

$db_Host = "123.456.789";
$db_name = "database";
$db_user = "user";
$db_pass = "password";
$db_table_prefix = "prefix_";



GLOBAL $errors;
GLOBAL $successes;

$errors = array();
$successes = array();

$mysqli = new mysqli($db_Host, $db_user, $db_pass, $db_name);
GLOBAL $mysqli;

if(mysqli_connect_errno()) {
    echo "Conn Error = " . mysqli_connect_error();
    exit();
}

?>

Je continue à avoir cette erreur:

Aucune connexion n'a pu être établie car la machine cible l'a activement refusée.

La recherche montre que cela signifie que le serveur "n'écoute pas". Avant d'exécuter le script ci-dessus, j'ai déjà essayé d'autoriser l'accès mysql à distance via l'interface Webmin. Ce que j'ai fait est éditer "gestion de la base de données-> autorisations de l'hôte" et le faire comme suit:

enter image description here

Ceci était supposé permettre un accès mysql à distance mais cela ne fonctionne pas. De plus, j'ai lu ailleurs que, pour autoriser l'accès mysql à distance, je dois éditer /etc/mysql/my.cnf; J'ai pensé qu'après avoir édité les "autorisations de l'hôte" dans Webmin, ce fichier serait modifié, mais ce ne fut pas le cas. D'autre part, je ne pouvais pas trouver les lignes que je devais éditer dans my.cnf, alors je suis coincé ici.

Toute aide est appréciée.

3
shenkwen

Connectez-vous mysql mysql -u yourname -p yourpassword, puis suivez comme ceci

mysql>use mysql;
mysql>select Host,user from user;

Cela peut donner le résultat suivant:

+-----------+------------------+
| Host      | user             |
+-----------+------------------+
| 127.0.0.1 | root             |
| ::1       | root             |
| localhost | debian-sys-maint |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)

Si vous voyez cela, cela signifie que vous ne pouvez connecter que mysql dans localhost, vous devez donc suivre les étapes suivantes:

mysql>GRANT ALL PRIVILEGES ON *.* TO username@"%" IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
mysql>flush privileges;
Query OK, 0 rows affected (0.00 sec)

"%" signifie que tout hôte peut se connecter à distance au serveur. Si vous souhaitez limiter l'accès à un seul ordinateur, vous devez remplacer le "%" par l'adresse IP de l'ordinateur auquel vous souhaitez autoriser la connexion.

Si cela fonctionne, alors vous select Host,user from user;, vous obtiendrez les informations suivantes:

+-----------+------------------+
| Host      | user             |
+-----------+------------------+
| %         | root             |
| 127.0.0.1 | root             |
| ::1       | root             |
| localhost | debian-sys-maint |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

Quittez mysql, éditez /etc/mysql/my.cnf, trouvez

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address           = 127.0.0.1

annotez-le ou vous pouvez le supprimer (non recommandé), redémarrez votre serveur mysql, en utilisantservice mysql restart, si vous faites comme moi, vous pouvez résoudre le problème.

Cela fonctionne bien sur mon ordinateur (Ubuntu 14.04 + MySQL 5.5)

6
zero lu