Tutoriel MySQL en Go [partie 1: installation]

Photo par Tobias Fischer sur Unsplash

On trouve assez facilement sur Internet des informations sur comment accéder à des bases de données de type SQL avec le langage de programmation Go. J’en ai pleinement profité, et j’ai été confronté à quelques difficultés que j’ai réussi à contourner avec parfois un peu de temps et de sueur. Il me semblait important de partager mon expérience à ce sujet.

Ce petit tutoriel vous accompagne sur la mise en place d’un serveur MySQL/MariaDB et sa programmation simple en Go. L’idée c’est de présenter ici le minimum pour avoir une application fonctionnelle. Il s’inscrit dans une petite série d’articles que je voulais faire sur les bases de données.

Sommaire

Présentation

SQL signifie Structured Query Language. C’est un langage de programmation qui permet le traitement de bases de données de type relationnelles. Je ne vais pas détailler comment ce langage fonctionne ici. Il existe plusieurs articles sur Internet qui le feront bien mieux que moi. J’ai choisi d’utiliser MySQL ou MariaDB (un fork de MySQL). Peut-être en ferai-je un autre avec SQLite voire PostreSQL plus tard. Ceci dit, le package “database/sql” permet de fonctionner avec ces serveurs aussi. Pour en savoir plus vous pouvez trouver les drivers SQL ici.

Go est lui aussi un langage de programmation. Il est développé par Google et est de plus en plus utilisé. C’est un langage simple inspiré de C : d’ailleurs l’un de ses concepteurs est Ken Thompson. Pour ma part, je l’ai découvert parce que plusieurs de ses concepteurs/contributeurs ont travaillé sur Plan9.

Installation de MySQL

Sur Linux Ubuntu, comme sur Debian, installer un serveur MySQL se fait (entre autres) avec le gestionnaire apt :

xigh@dev:~$ sudo apt install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libevent-core-2.1-6 mysql-client-5.7 mysql-client-core-5.7 mysql-server-5.7 mysql-server-core-5.7
...
Upgrade process completed successfully.
Checking if update is needed.
Setting up mysql-server (5.7.26-0ubuntu0.18.10.1) ...

Ensuite, il faut configurer et sécuriser votre serveur (ne serait-ce que les mots de passe). On fait ça avec la commande mysql_secure_installation, dont je vous invite à lire la documentation :

xigh@dev:~$ mysql_secure_installation

Ensuite on vérifie que l’accès fonctionne bien :

xigh@dev:~$ mysql -u root -p
Enter password:

Et là, pour certains, c’est le drame car la connexion est refusée :

Access denied for user 'root'@'localhost'

Pourtant, le mot de passe est bien saisi. J’ai trouvé une solution ici. Pour ma part, voici une façon alternative de procéder. Connectez-vous au serveur via la commande sudo :

xigh@dev:~$ sudo mysql -u root -p

Maintenant, tapez les commandes SQL suivantes :

USE mysql;

UPDATE user SET authentication_string=PASSWORD("admin") WHERE User='root';

UPDATE user SET plugin="mysql_native_password";

Bien évidemment, remplacez admin par le mot de passe de votre choix. Je ne saurais trop recommander l’utilisation d’un générateur de mots de passe aléatoire.

Et si on passait à la connexion à cette base de données avec Go ?

Tutoriel MySQL en Go

  1. Tutoriel MySQL en Go [partie 1: installation]
  2. Tutoriel MySQL en Go [partie 2: connexion et configuration]
  3. Tutoriel MySQL en Go [partie 3: transfert de données]
  4. Tutoriel MySQL en Go [partie 4: transactions]