Installation et configuration du serveur MySQL (MariaDB)

Page mise à jour le 30 avril 2024

Mise à jour : 20 mars 2018

Cet article fait partie d’une série d’articles sur l’installation d’un serveur Linux sous Debian

Ces commandes sont à exécuter en tant que l’utilisateur root

MySQL – MariaDB ?

MySQL fait partie des logiciels de gestion de base de données relationnelles (SGBDR) les plus utilisés au monde. Il est distribué sous une double licence GPL et propriétaire, car en 2009, il a été acquis par Oracle Corporation.
Pour connaitre l’histoire complète des acquisitions successives par Sun puis Oracle, consultez l’article Wikipedia de MySQL

Depuis mai 2009, son créateur Michael Widenius a créé MariaDB pour continuer son développement en tant que projet Open Source. MariaDB clame bon nombre d’avantages vis-à-vis de MySQL et est devenu le SGBDR par défaut depuis la version 9 de Debian.

Nombre d’articles sur la toile comparent les deux SGBDR, en terme de respect de la norme SQL (net avantage à MariaDB), de performances, de compatibilité, …

Mon avis : Ce que l’on peut faire avec MySQL, on peut le faire avec MariaDB (mais pas l’inverse) ; passer de MySQL à MariaDB (bases, code, …) est simple, mais pas l’inverse ; MariaDB offre de nets avantages d’administration, de sauvegarde, de choix de moteurs vis-à-vis de MySQL ; les tutoriels et (bonnes) commandes de la toile marchent aussi bien sur l’un que sur l’autre. Donc, je conseille d’installer et d’utiliser MariaDB. 

Installation des packets

Les packets à installer sont : mysql-server et mysql-client.
(En réalité, ce sont des méta-packets qui installent MariaDB server/client) 

apt-get install mysql-server mysql-client

Configuration du serveur MariaDB

Script mysql_secure_installation

Il est très fortement conseillé de lancer le script mysql_secure_installation, qui améliore la sécurité du serveur, via le réglage d’un certain nombre de paramètres, de manière interactive.

mysql_secure_installation

Mot de passe root du serveur MariaDB

Il est impensable de ne pas définir de mot de passe pour l’utilisateur root, qui a tous les droits sur le serveur MariaDB.

Réinitialisation du mot de passe root de MariaDB

Un problème fréquent est l’oubli du mot de passe du compte root du serveur de BDD. Voila comment le redéfinir :

  1. Arrêt du serveur
    /etc/init.d/mysql stop
  2. Démarrage du serveur en safe-mode (sans chargement des droits ; sans logs ; sans accepter de connexions réseau)
    mysqld_safe --skip-grant-tables --skip-syslog --skip-networking
  3. Connexion au serveur avec le compte root, mais sans mot de passe
    mysql -u root
  4. Execution de la requête affectant le mot de passe du compte root
    UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
    FLUSH PRIVILEGES;
  5. Arrêt du serveur fonctionnant en safe-mode, et démarrage du serveur en mode normal
    mysqladmin shutdown
    sudo service mysql start

Se connecter au serveur depuis l’extérieur

Il faut bien comprendre deux choses, si l’on souhaite pouvoir accéder au serveur de BDD depuis l’extérieur (c’est à dire depuis une autre machine que localhost) :

  1. Il faut configurer le serveur pour accepter les connexions depuis l’extérieur (ainsi qu’éventuellement le firewall, un éventuel routeur, NAT, …) ;
  2. Il faut configurer les comptes des utilisateurs pour que ces derniers puissent se connecter depuis l’extérieur.

La documentation officielle concernant l’accès au serveur de BDD depuis un hôte distant est assez claire.

Configuration du serveur pour accepter les connexions extérieures

Par défaut, le serveur n’accepte pas les connexion extérieures, ou plutôt, il n’accepte que les connexions locales (depuis l’adresse de LoopBack : localhost = 127.0.0.1).

Sous Debian, deux fichiers nous intéressent :

  • /etc/mysql/my.cnf : fichier de configuration principal, qui ne fait pas grand chose hormis charger automatiquement les fichiers de configuration présents dans /etc/mysql/conf.d/ et /etc/mysql/mariadb.conf.d/
    [client-server]
    # Import all .cnf files from configuration directory
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mariadb.conf.d/
    
  • /etc/mysql/mariadb.conf.d/50-server.cnf : fichier de configuration du démon du serveur, qui contient notamment les instruction de ce dernier après le mot clé [mysqld]

    [mysqld]
    ### Plein de choses ... ###
    
    # Instead of skip-networking the default is now to listen only on localhost which is more compatible and is not less secure.
    
    #bind-address = 127.0.0.1 # ligne commentée : toutes les IP peuvent se connecter
    

Vous l’aurez compris avec l’extrait ci dessus : il faut soit commenter la ligne bind-address, soit ajouter les IP autorisées à se connecter.

Configuration des utilisateurs pour qu’ils puissent se connecter depuis l’extérieur

Après s’être connecté au serveur en root, on peut :

  • Visualiser la liste (table) des utilisateurs :
     SELECT User, Host FROM mysql.user;
    +------------+------------------+
    | User       | Host             |
    +------------+------------------+
    | root       | %                |
    | valerian   | %                |
    | root       | localhost        |
    | valerian   | localhost        |
    +------------+------------------+
    

    Dans l’exemple ci-dessus, root et valerian peuvent se connecter depuis localhost et depuis n’importe où (%)

  • Définir les droits et hôtes clients autorisés pour un utilisateur :
    PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;
    

    Dans l’exemple ci-dessus : root peut se connecter de n’importe où (%) à toutes les tables de toutes les bases (*.*).
    Attention ! Ceci est un exemple ! Il n’est pas très judicieux d’autoriser une règle si permissive !

Tests

Connexion au serveur, via le client, en local

mysql -u root #devrait ne pas fonctionner, car le mot de passe root devrait être défini et donc nécessaire
mysql -u root -p #demande le mot de passe de l'utilisateur root, de manière interactive
mysql -u root -p -h localhost #l'argument -h localhost est ici facultatif, puisque la connexion est faite depuis la même machine que le serveur (localhost)

Commandes de base

SELECT 'Hello World !'; #Affichage d'une chaine de caractères
SELECT (21*2); #Calcul idiot
help ; #Affichage des commandes de base
quit ; #Fermeture de la connexion et du client

Administration de la base de données

Créer une BDD, une table et un utilisateur

  1. Connexion au serveur de BDD en root
    mysql -u root -pMot_de_passe # Remarquez que l'on peut saisir le mot de passe à l'appel du client, avec l'argument -p suivi sans espace du mot de passe
  2. Requêtes de création d’une BDD et d’un utilisateur
    create database testdb;
    create user 'testuser'@'localhost' identified by 'password';
    grant all on testdb.* to 'testuser' identified by 'password';
    exit;
    
  3. Connexion au serveur de BDD avec l’utilisateur créé précédemment
    mysql -u testuser -p
  4. Requête de sélection de la BDD créée précédemment
    use testdb;
    
  5. Requête de création d’une table dans la BDD
    create table copains (copains_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, nom_de_famille TEXT, prenom TEXT);
    
  6. Affichage des tables de la BDD
    SHOW TABLES;
    +------------------+
    | Tables_in_testdb |
    +------------------+
    | copains          |
    +------------------+;
    
  7. Affichage des colones de la table
    SHOW COLUMNS FROM copains;
    +----------------+---------+------+-----+---------+----------------+
    | Field          | Type    | Null | Key | Default | Extra          |
    +----------------+---------+------+-----+---------+----------------+
    | copains_id     | int(11) | NO   | PRI | NULL    | auto_increment |
    | nom_de_famille | text    | YES  |     | NULL    |                |
    | prenom.        | text    | YES  |     | NULL    |                |
    +----------------+---------+------+-----+---------+----------------+
    

Optimisation de la base de données

  1. Installation du packet mysqltuner :
    apt-get install mysqltuner
  2. Lancement du programme :
    mysqltuner --user root --pass mot_de_passe_root
  3. Interprétation des recommandations :
    – MySQL (MariaDB) doit être lancé depuis plus de 24h pour que des recommandations pertinentes soient proposées ;
    – Un peu d’aide ici : https://github.com/major/MySQLTuner-perl/