Comment se connecter à mysql sans l'IP?

Bonjour
Avez-vous un exemple de sketch qui peut se connecter à une base de donnée avec un nom de domaine et non avec une adresse ip?
Car, chez OVH, il est impossible à ma connaissance d’avoir une ip pour sa BBD.
Je débute dans les réseaux, donc j’ai sans doute des lacunes.

Voici un sketch que je pensais avoir trouvé, mais ça ne marche pas…
Je ne comprends pas pourquoi dans cette ligne de code apparait server_ip, puisque on a dit que c’était par hostname (même si ça me parait quand même délirant d’imaginer se connecter à google.com comme serveur…) Je sens bien que je confonds deux trucs, mais j’ai besoin que quelqu’un de gentil m’explique quoi ^^
if (conn.connect(server_ip, 3306, user, password))

#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <Dns.h>

byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

char hostname[] = "www.google.com"; // change to your server's hostname/URL
char user[] = "root";               // MySQL user login username
char password[] = "secret";         // MySQL user login password

IPAddress server_ip;
EthernetClient client;
MySQL_Connection conn((Client *)&client);
DNSClient dns_client;   // DNS instance

void setup() {
  Serial.begin(115200);
  while (!Serial); // wait for serial port to connect
  Ethernet.begin(mac_addr);
  // Begin DNS lookup
  dns_client.begin(Ethernet.dnsServerIP());
  dns_client.getHostByName(hostname, server_ip);
  Serial.println(server_ip);
  // End DNS lookup
  Serial.println("Connecting...");
  if (conn.connect(server_ip, 3306, user, password)) {
    delay(1000);
    // You would add your code here to run a query once on startup.
  }
  else
    Serial.println("Connection failed.");
  conn.close();
}

void loop() {
}

Bonjour

En version gentil : "ça ne marche pas" n'est jamais une bonne description de problème, propice à favoriser l'obtention d'une aide pertinente :slight_smile:

Qu'est-ce qui s'affiche dans le terminal Série?

Que souhaites-tu faire avec cette base de donnée?

Le cas d'école avec Arduino est de vouloir enregistrer les données d'un capteur.
Auquel cas, la solution la plus usuelle est de monter un serveur PHP avec une page dédiée à cet effet, plutôt que de passer par le port 3306 pour se connecter directement à la base mysql.

Ce qui a du t'échapper :
dns_client.getHostByName(hostname, server_ip);Cette ligne de code récupère l'adresse ip du serveur, à partir de son nom de domaine et via l'interrogation d'un DNS.
hostname est la variable en entrée
server_ip est la variable en sortie

Merci pour la version gentille :smiley:

En fait, contrairement à la plupart des exemples trouvés sur le net, je veux faire exactement le contraire: récupérer une information dans une colonne et une ligne d'une DB (un booléen, pour tout dire) et le rapatrier comme booléen utilisable dans mon code.

Si je comprends bien ton explication de la ligne de code en question, alors, je crois comprendre le problème (ce qui ne marche pas ^^). Selon mes recherches (mais j'ai peut-être mal cherché???), il n'est pas possible de convertir en adresse ip le hostname d'une DB ovh (un simple Ping hostname dans le terminal le prouve). Du coup, je me pose la question de savoir ce que je peux renseigner dans le code pour qu'il trouve ma DB prête à l'emploi...
Petite remarque au passage, le port chez ovh n'est pas le 3306, mais je l'ai bien entendu modifié dans le code.
Le moniteur série m'indique que je suis connectée au réseau mais, "Connection failed" pour la DB après environ 1 minute...

babette:
... il n'est pas possible de convertir en adresse ip le hostname d'une DB ovh (un simple Ping hostname dans le terminal le prouve).

A mon avis il y a une petite confusion : une DB ovh n'a pas de hostname ni d'adresse ip.

Un serveur a une adresse ip et (pas obligatoirement mais dans la plupart des cas) un nom de domaine.

Le nom de domaine, c'est le www.machintruc.com
C'est un alias associé à une adresse ip, que l'on réserve auprès des annuaires du web.
Il se retrouve alors connu des DNS (serveurs de nom de domaine).
Lorsque tu saisis www.machintruc.com dans ton navigateur, celui-ci interroge d'abord un DNS pour récupérer l'adresse ip associée, et dans un second temps il se connecte au serveur sur cette adresse ip.

Autre point important : un client accède toujours à un serveur via un port de ce dernier.

Par exemple, le port 80 est en principe celui qui retourne une page html.
C'est le port interrogé par les navigateurs.

Ta base mysql se trouve sur un serveur (qui a un hostname et une ip) chez ovh.
Il y a quelque chose à faire au niveau du serveur pour ouvrir les accès au port 3306 et l'associer à un programme lié à mysql. Mais cette première manip est peut-être déjà effectuée de manière automatique sur les serveur à l'installation de mysql (je ne sais pas trop).
Ensuite il faut aller dans le panneau d'administration mysql pour y déclarer un user/mot de passe d'accès à la base de données, ainsi que ses droits associés.
Et enfin il faut maîtriser le format des flux échangés sur ce port.
Bref pas simple tout ça, et je me demande si ce n'est pas plutôt destiné à permettre à plusieurs mysql de discuter entre eux.

Mais il y a beaucoup plus simple pour faire ce que tu veux :
Au niveau du serveur, tu crées une page PHP accessible via une simple url, dont le contenu est limité à la valeur de ta donnée lue dans la DB.
Le bon fonctionnement de cette page peut être vérifier avec un simple navigateur.
Et au niveau arduino, tu te connectes de manière classique au serveur pour lire la page, et tu récupères la valeur

Je suis étonnée du début de ta réponse, car après ma souscription à OVH, j'ai bien reçu mes informations de connexion à ma BD:

  • Nom d'hôte : xxxxxxxxx01.privatesql (xxxxx est mon identifiant client ovh. On voit bien que c'est un hostname)
  • Port : 3xxx8 (le port à utiliser à la place du 3306)

J'ai effectivement du créer un ou des utilisateurs et password qui peuvent accéder à la DB.

Ceci dit, je trouve ta solution via la page PHP pleine de bon sens et plutôt pratique. merci