Tout n'est pas cousu d'avance
Quand on veut accéder depuis une application écrite en java à un serveur mysql situé sur un autre ordinateur, il va falloir faire attention à quelques détails indispensables :
- vérifier le pare feu de chaque machine !
- autoriser la connexion du serveur java sur le serveur mysql dans /etc/hosts.allow
- autoriser vos utilisateurs à se connecter sur le serveur mysql depuis la machine java dans la table mysql.user
- si vous utilisez ssh pour cette connexion, configurez correctement votre serveur de clés d'authentification
Je ne décrirai pas le dernier point car c'est (encore) hors de ma compétence. Mais je vais détailler les autres points. Tout est à réaliser avec les droits root !
pare-feu
connexion tcp/ip
Éventuellement, il faudra modifier /etc/hosts.allow sur le serveur mysql en ajoutant une ligne comme :
Ensuite il faut modifier /etc/mysql/my.cnf sur le serveur mysql pour autoriser la connexion depuis une autre machine. Pour cela il faut mettre en commentaire la directive skip-networking, mais dans un serveur récent, elle n'est plus utilisée. À la place on a bind-address = 127.0.0.1 et en fait on va créer ou modifier bind-address pour y mettre l'adresse du serveur java (ici, 192.168.0.42), ou bien 0.0.0.0 si on veut autoriser tous les serveurs :
utilisateurs mysql
Créez ou modifiez votre utilisateur avec "%" dans le champ Host de la table user de la base de données nommée mysql . On peut réduire la portée en mettant 192.168.0.% à la place de % par exemple, ou encore avec l'adresse IP du seul serveur depuis lequel la connexion est autorisée.
Attention avec phpmyadmin
Si vous avez mis une portée de Host comme 192.168.0.% par exemple, alors vous ne pourrez plus vous connecter avec cet utilisateur avec phpmyadmin. Si ça vous ennuie, il faudra créer un autre profil de l'utilisateur avec localhost comme valorisation du champ Host et le doter des mêmes privilèges. Le code ci-après montre comment créer les deux pour un utilisateur connext.
Avec une portée comme %, vous pouvez aussi vous connecter via phpmyadmin car % inclut localhost.