Base de données SQL

Il existe un grand nombre de bases de données installables sur Linux. Une des plus utilisées est "MySQL". Elle n'a qu'un seul défaut, c'est d'être payante. C'est normal, c'est du boulot de développer de tels trucs. Et puis, notre Raspberry Pi serait quand même limite en puissance pour un tel logiciel. Heureusement, il existe dans les logiciels libres, une base de données SQL compatible avec MySQL totalement gratuite sur le Raspberry, qui se nomme "MariaDB"". A tel point que sur beaucoup de site, les gens parlent de MySQL alors qu'ils utilsent MariaDB. A titre d'exemple, un librairie cliente MySQL marche parfaitement bien avec un serveur MariaDB. Et inversement. C'est ce qui a fait la réputation de MariaDB. Ce qui est marrant, c'est que même les logos des deux bases se ressemblent. Pour l'une c'est un dauphin, pour l'autre, une otarie. Hors, chez les dauphins, il y a les orques, qui se régalent à croquer de l'otarie.

Installation de MariaDB

Avant d'installer MariaDB, nous allons nettoyer le répertoire "/var/www/html" que nous avons modifié à la rubrique Language PHP sur le Serveur WEB. Pour cela, ouvrir un terminal et exécutez les commandes suivantes :


sudo rm /var/www/html/index.php
sudo rm /var/www/html/index.html


Toujours dans le terminal exécutez la commande "apt-get" suivante :


sudo apt-get install mariadb-server php-mysql -y


Cela installe MariaDB et complémente le language SQL par les commandes d'accès à MySQL (Donc MariaDB !).


La première chose à faire est d'initialiser la sécurité d'accès à la base de données. Ce n'est pas que l'on soit très regardant quand on bosse pour un réseau local à la maison, mais il y a quand même un minimum. Nous allons utiliser le script "mysql_secure_installation". Il permet de définir un mot de passe d'administrateur de la base de données, de préciser si la base de données peut être administrée depuis un autre ordinateur, etc.... Exécutez la commande suivante :


sudo mysql_secure_installation


Lors de son exécution ce script va vous poser plusieurs questions :


Enter current password for root (enter for none) :


Comme nous venons juste de l'installer, l'administrateur "root de notre serveur MariaDB n'a pas de mot de passe. Vous pouvez donc appuyer sur la touche "Entrée" directement.

Attention : "Root" de la base de données n'est pas celui de Linux. Ne confondez pas.


Switch to unix_socket authentication [Y/n] :


Pour se connecter à une base de données, il faut avoir le droit. On parle d'authentification. Il existe divers protocoles pour cela, dont "unix_socket". Nous ne souhaitons pas cela. Répondre "n" puis appuyer sur "Entrée"


Set root Password ? [Y/n] :


Comme l'administrateur "Root" n'a pas de mot de passe, le script vous propose de lui en donner un. Vous pouvez décider de lui en donner un, mais à ce stade cela ne présente pas d'interêt. Répondre "n" appuyer sur "Entrée"


Remove anonymous users? [Y/n] :


Par défaut, il existe des utilisateurs anonymes, c'est à dire "n'importe qui"", qui peuvent lire la base de données. Nous n'en voulons pas, donc on les supprime. Répondre "Y" appuyer sur "Entrée"


Disallow root login remotely? [Y/n] :


Traduction : "Voulez vous que l'administrateur "Root", en l'occurence : Vous, ne puisse pas administrer le serveur depuis un autre ordinateur ?" Ben.... Non, on a tout fait jusqu'ici pour pouvoir contrôler notre Raspberry pi depuis un ou d'autres PC de notre réseau de la maison. On serait idiot de se priver de cela pour cette fonction. Donc, répondre "n" puis appuyer sur "Entrée"


Remove test database and access to it? [Y/n] :


On peut répondre "Oui" car nous n'en avons pas besoin. Donc, répondre "Y" puis appuyer sur "Entrée"


Reload privilege tables now? [Y/n] :


Nous avons effectivement modifié des privilèges d'accès à notre base. Donc, répondre "Y" puis appuyer sur "Entrée"


Une base de données offre de multiples moyens pour y accéder. L'un d'eux est ce que l'on nomme la console. C'est un peu l'équivalent d'un terminal, mais uniquement pour la base de données. A ce stade, si nous sommes capables d'ouvrir une console SQL, c'est que la base est bien installée. Nous allons donc tenter l'expérience. Pour cela on utilise la commande "mysql". Elle prend au moins deux paramètres :


 - -u : Pour "username", nom de l'utilisateur. Pour nous ce sera "Root"
 - -p : Pour "password", mot de passe de l'utilisateur. "Root" n'a pas de mot de passe. Donc on laissera ce paramètre vide.


Dans notre terminal, entrons la commande :


sudo mysql -u root -p


Maintenant, vous n'etes plus dans le terminal, mais vous etes dans la console SQL. Ici, vous pouvez exécuter n'importe quelle commande SQL, comme CREATE DATABASE, SELECT, INSERT, etc... Ce n'est pas notre objectif, pour le moment. On souhaite simplement arrêter la console. Donc, entrez la commande suivante :


EXIT;


Nous voila revenu au terminal

Le coup classique

Si vous tentez d'accéder à la base de données depuis un autre ordinateur... Rogntud'ju...; Ca marche pas. La raison est profondément enfouie dans les tréfonds des fichiers de configuration du serveur.


C'est le problème du "binding". En français : De l'attachement. le "binding" définie quelles adresses IP ont le droit d'accéder à la base de données. Et par défaut il n'y a que la machine locale à l'adresse qui la désigne localement : "127.0.0.1". Il faut donc modifier cela. Ce paramètre est enfoui dans le fichier "/etc/mysql/mariadb.conf.d/50-server.cnf". Ouf !!!! Nous allons le modifier avec l'éditeur nano. Entrez la commande :


sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf


En utilisant les flêches du clavier, cherchez la ligne suivante :


bind-address = 127.0.0.1


Et modifiez la en :


bind-address = 0.0.0.0


Voila, maintenant votre serveur écoute toutes les adresses IP.


Je n'ai jamais compris pourquoi ce paramètre n'était pas modifiable par le script "mysql_secure_installation". En effet, pourquoi conservez le droit à l'administrateur de se connecter d'une machine distante, alors que le serveur ne s'attache par défaut qu'à la machine locale ? Si vous avez la réponse.... Je suis preneur.


La prochaine étape : phpmyadmin pour la base SQL.