Collecte de données vers base mysql

Bonjour à tous, je me suis lancé depuis dans l’utilisation des Raspberry PI avec quelques connaissances en programmation. Mon projet me semblait simple au départ mais au fil du temps je me suis heurté à plusieurs problèmes ce qui explique ma présence sur le forum.
Je possède pour l’heure actuelle deux PI 4, un qui me sert de serveur web Apache avec base de données gérée grace à PHPMyadmin et le deuxième qui situé à distance collecte des données de production photovoltaïque. L’idée est que le deuxième RPI collecte les données et les transmettes à ma base de données distante. L’objectif étant par la suite que mon serveur utilise cette base de donnée pour alimenter un site en PHP. Du coté du serveur tout est bon et j’ai accès à l’ensemble depuis le web.
Le problème que je rencontre est que je n’arrive pas à me connecter a la base de données à distance même après avoir créer un utilisateur ayant tous les droits à partir d’une adresse IP quelconque (hostname: %).
J’espère que vous pourriez m’éclairer sur l’utilisation et l’accès au base de données de manière générale.

hello,

si t’es sur de ta création de l’utilisateur et son accès et ses droits a ta base ( table user et db dans base mysql )
tu n’as peut être pas de port en écoute pour l’acces exterieur a ta base.
pour ça il faut modifier la config de mysql (Mariadb)
dans /etc/mysql tu fais un grep « 127 » * et quand tu as le fichier, tu changes la ligne :
bind-address = 127.0.0.1
par
bind-address = 0.0.0.0
chez moi c’est ds my.cnf
apres un redemarrage de la base et si tu fais un : netstat -ta
tu devras avoir ça :
tcp 0 0 0.0.0.0:mysql 0.0.0.0:* LISTEN

ensuite tu peux restreindre l’acces ( iptables sur le port 3306 uniquemt pour l’IP de ton apache), les droits inutiles (en gardant que SELECT,INSERT, UPDATE en général ça suffit ! ) ça peut éviter des problèmes ( bon ok je suis parano :wink: )

Merci pour ta réponse. En fait dans mon fichier de conf, j’ai carrément mis cette ligne en commentaire.

* Basic Settings

user = mysql
pid-file = /run/mysqld/mysqld.pid
socket = /run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
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 = 92.49.95.127
J’avais déja essayé en y mettant 0.0.0.0 afin d’autoriser toutes les IP mais ça ne passait toujours pas.
Depuis l’autre RPI distant, quand j’essaie de me connecter "mysql -uroot -p -h (IP_Server), j’ai le message d’erreur 110 « Connection timed out »
Question: Afin de se connecter à la BDD distante, on a juste besoin de mariadb et de sa configuration? ou il faut un autre package?

si tu utilises:
bind-address = 127.0.0.1
il n’y auras pas d’acces exterieur possible seul apache pourra y accéder.
donc :
bind-address = 0.0.0.0

ensuite sur le Rpi avec la base avec mysql -u root -p
CREATE USER ‹ raspi ›@‹ 192.168.1.15 › IDENTIFIED BY ‹ mot-de-passe ›;
-raspi : ton id pour te connecter depuis l’autre Rpi
-192.168.1.15 : son adresse IP
-oublie pas les quotes !
GRANT SELECT, INSERT, UPDATE ON orga.* TO ‹ raspi ›@‹ 192.168.1.15 ›;

  • ou orga est la base que tu veux accéder ( .* toutes les tables de la base )

éventuellemt dans le doute:
FLUSH PRIVILEGES;

sur l’autre Rpi juste le client mariadb suffit:
sudo apt-get install mariadb-client-10.3 ( ou autre version)

et la miraculo :
mysql -u raspi -p -h 192.168.1.11

  • ou 192.168.1.11 est le serveur ( non ? sisi !! :wink: )

pour le time out c’est dans le même fichier de config que le bind-adresse
connect_timeout = 5
normalement en l’augmentant ça devrait le faire !

Ca ne fonctionne toujours pas. J’ai suivi ton exemple pour créer un utilisateur et j’ai aussi créer un en l’indiquant dans phpmyamin mais toujours pas moyen de se connecter à distance à ma base de données. Y a t’il un moyen de vérifier que l’utilisateur a bien été créé ?

pour voir l’« état » de ton user c’est dans la table user de la base mysql.
avec un terminal :
mysql -u root -p

use mysql;
select * from user;
par phpmyadmin c’est plus lisible !

apres avoir augmenter le time-limit et redémarrer ton serveur, t’as toujours un message sur le time-limit ?
t’as essayé de connecter ton site d’apache depuis l’autre Rpi avec un navigateur ? ( le pb vient peut être du reseau )
tu peux aussi créer un autre user pour le localhost
CREATE USER ‹ raspi ›@‹ localhost › IDENTIFIED BY ‹ mot de passe ›;
GRANT SELECT, INSERT, UPDATE ON orga.* TO ‹ raspi ›@‹ localhost ›;
et y acceder sur le Rpi de Mariadb par :
mysql -u raspi -p

l’acces a l’apache via la navigateur web ( ou n’importe quel autre connexion reseau ( ssh, ping …) va te permettre de vérifier ton réseau ( tu peux le faire dans les deux sens )
la création d un user local te permettra de voir si la création du user se fait correctement.

si tu trouve des error ou des failt ds un :
systemctl status mysql
ça peut aussi te donner des pistes…

Le truc bizarre c’est le time limit …
tu pourrais vérifier la table user ( sur phpmyadmin )

  • selectionne base mysql puis table user puis onglet opération et tous les trucs qu il y a ds « maintenance de la table »
  • t’as verifier la carte sd du Rpi avec la base ?

En dernier ressort : si t’as rien dans ta base ( ou tu peux exporter les tables que tu re-importera après ! ) tu peux désinstaller mariabd avec un purge parfois quand on galère dans la config on bidouille des trucs qui mette le souk ( ou il peut aussi y avoir eu un problème a l’install )

PS : cet cochonceté d’éditeur du forum transforme parfois (!) des caracteres le ’ devient › C’est en fait l’apostrophe sur la touche 4 …

Merci pour ton retour. Oui effectivement c’est bien l’apostrophe qui est de vigueur.
L’utilisateur se crée bien en commande. Je peux le voir sur phpmyadmin. L’erreur que j’obtient est:
ERROR 2002 (HY000): Can’t connect to Mysql serveur on ‹ xxx.xxx.xxx.xxx › (115)
Je peux me connecter à Apache à distance depuis n’importent quel réseau. J’ai suivi le tuto disponible à cette adresse:


Le service est bien en active(running)
Une piste peut-être. L’adresse IP de l’utilisateur a indentiquer est laquelle? C’est à dire que l’autre RPI est connecté en wifi. Son inet est 192.168.1.22 et il y a la passerelle broadcast 192.168.1.255

dans user il te faut :
host : l’IP distante ( ton RPI sans Apache « l’autre » donc si j’ai bien compris ce doit etre 192.168.1.22)

si tu fais un ping 192.168.1.22 sur l’apache et un autre depuis l’apache c’est que ton réseau entre les deux fonctionne
les commandes utiles pour voir les ip , la passerelle et le routage ce sont :
sudo ifconfig
et
sudo route -n
l’execution de route sur les deux Rpi doit te donné le même résultat si ta passerelle est ta box ( cas classique; sans doute 192.168.1.1)

A l’heure actuelle ils ne sont pas vraiment sur la même passerelle. Le serveur est relié directement à ma box ( 192.168.0.1) et l’autre via un autre routeur local (192.168.1.1)
Ca fait maintenant 3 jours que je penche dessus. Je commence à perdre espoir.


Est-il normal que le serveur de la BDD indique localhost?

Je me demande est ce que tout cela n’est pas du a une histoire d’ouverture de port? On vient écouter sur le port 3306 mais ce dernier n’est pas ouvert sur ma box. Enfin… je me pose la question.

Voila problème résolu. Il fallait bien ouvrir le port 3306 sur ma box en indiquant une redirection vers l’ip du Raspberry servant de serveur.

pour la BDD avec localhost:
ok ça c’est bon j’ai quasi la même sur mon serveur Mariadb

Le probleme semble être ton routage alors va falloir lui indiquer la bonne route…:

a saisir sur l’ « autre » (192.168.1.22)
sudo route add -net 192.168.0.0 netmask 255.255.255.0 dev wlan0
ou wlan0 est la carte réseau tel que te donne un ifconfig (celle ou il y a l’IP )

j’imagine que t’as un routeur wifi connecter a ta box par un câble Ethernet ou en wifi et qui n’a pas de firewall et que quand tu fais un ssh pi@apache depuis 192.168.1.22 ça marche pas non plus ?