Comment autoriser l’accès à distance à MySQL

Note

De nombreux sites Web et applications démarrent avec leur serveur Web et leur base de données hébergés sur le même ordinateur. Avec le temps, cependant, une telle configuration peut devenir lourde et difficile à faire évoluer. Une solution courante consiste à séparer ces fonctions en configurant une base de données distante, permettant ainsi au serveur et à la base de données de se développer à leur propre rythme sur leurs propres ordinateurs.

L'un des problèmes les plus courants rencontrés par les utilisateurs lorsqu'ils tentent de configurer une base de données MySQL distante est que leur instance MySQL est uniquement configurée pour écouter les connexions locales. Il s’agit du paramètre par défaut de MySQL, mais il ne fonctionnera pas pour une configuration de base de données distante, car MySQL doit pouvoir écouter l’adresse IP deexternal où le serveur peut être atteint. Pour activer cela, ouvrez votre fichiermysqld.cnf:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Accédez à la ligne qui commence par la directivebind-address. Il ressemblera à ceci:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# 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
. . .

Par défaut, cette valeur est définie sur127.0.0.1, ce qui signifie que le serveur ne recherchera que les connexions locales. Vous devrez modifier cette directive pour référencer une adresse IP externe. À des fins de dépannage, vous pouvez définir cette directive sur une adresse IP générique, soit*,:: ou0.0.0.0:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
. . .

[.Remarque]##

Note: Si vous exécutez MySQL 8+, la directivebind-address ne sera pas dans le fichiermysqld.cnf par défaut. Dans ce cas, ajoutez la ligne en surbrillance suivante au bas du fichier:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
bind-address            = 0.0.0.0

Après avoir modifié cette ligne, enregistrez et fermez le fichier, puis redémarrez le service MySQL:

sudo systemctl restart mysql

Ensuite, essayez d’accéder à votre base de données à distance à partir d’une autre machine:

mysql -u user -h database_server_ip -p

Si vous parvenez à accéder à votre base de données, cela confirme que la directivebind-address dans votre fichier de configuration était le problème. Veuillez noter, cependant, que la définition debind-address sur0.0.0.0 n'est pas sécurisée car elle permet les connexions à votre serveur à partir de n'importe quelle adresse IP. D'autre part, si vous ne parvenez toujours pas à accéder à la base de données à distance, le problème peut être dû à un autre problème. Dans les deux cas, vous trouverez peut-être utile de suivre notre guide surHow To Set Up a Remote Database to Optimize Site Performance with MySQL on Ubuntu 18.04 pour configurer une configuration de base de données distante plus sécurisée.