Nous allons apprendre à installer et à configurer MariaDB, un système de gestion de base de données relationnelle (SGBDR) MySQL à code source ouvert très populaire.

Il est développé par la communauté et peut bénéficier d’un support commercial. MariaDB a été conçu pour rester hautement compatible avec MySQL, bien qu’il y ait quelques différences.

Dans cet article, nous allons couvrir l’installation et la configuration de MariaDB sur Ubuntu 20.x et CentOS 7.x/8.x et, à la fin, nous passerons en revue les meilleures pratiques pour sécuriser et améliorer ses performances.

MariaDB sur Ubuntu

Sur Ubuntu 20.x, MariaDB est disponible directement depuis les dépôts par défaut. Nous utiliserons apt pour cette tâche.

Mettez d’abord à jour les données des dépôts apt par :

$ sudo apt update

Une fois les données du dépôt mises à jour, exécutez :

$ sudo apt install mariadb-server

Ceci installera MariaDB et les paquets nécessaires. Confirmez avec ‘Y’ pour toutes les invites que vous pourriez recevoir pendant l’exécution de la commande précédente.

Voulez-vous continuer ? [Y/n] Y

MariaDB sur CentOS 7.x

Pour CentOS 7.x, la version de MariaDB disponible dans le dépôt par défaut de CentOS est 5.x. Nous allons installer la dernière version disponible de MariaDB.

Pour cela, nous devons d’abord configurer un dépôt yum supplémentaire. MariaDB fournit un moyen simple d’utiliser le script mariadb_repo_setup. Pour configurer le dépôt, exécutez les commandes suivantes sur votre système CentOS 7.x :

$ sudo yum install wget
$ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ chmod x mariadb_repo_setup
$ sudo ./mariadb_repo_setup

Ce script va mettre en place le dépôt yum nécessaire à l’installation automatique de la dernière version de MariaDB. Au moment de la rédaction de cet article, il s’agit de la version 10.x.

Au cas où vous voudriez procéder manuellement, vous pouvez configurer un dépôt yum manuel en créant un nouveau fichier repo comme suit :

$ sudo vi /etc/yum.repos.d/MariaDB.repo

Ajoutez ensuite les détails suivants au fichier repo et sauvegardez-le :

[mariadb]
nom = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Maintenant, pour installer MariaDB, exécutez la commande suivante :

sudo yum install MariaDB-server

Confirmez toutes les invites qui apparaissent pendant l’installation en entrant “y” :

Est-ce que c'est ok [y/d/N] : y

L’installation du serveur MariaDB et des paquets dépendants est terminée.

MariaDB sur CentOS 8.x

Pour CentOS 8.x, la version disponible à partir des dépôts par défaut est 10.3 ou plus récente. Nous pouvons installer MariaDB directement à l’aide de la commande DNF:

sudo dnf install mariadb-server

Sinon, pour obtenir la dernière version disponible, vous pouvez suivre la méthode manuelle indiquée dans la section précédente pour CentOS 7.x et cela devrait vous permettre de travailler.

Démarrer MariaDB

Sur une machine Ubuntu, le service MariaDB est lancé dès l’installation, alors que pour CentOS, il faut activer et démarrer manuellement les services concernés.

Dans tous les cas, pour Ubuntu comme pour CentOS, exécutez les commandes suivantes pour démarrer le service MariaDB, l’activer au démarrage et le vérifier :

sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service

Résultat :

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
Création d'un lien symbolique entre /etc/systemd/system/multi-user.target.wants/mariadb.service et /usr/lib/systemd/system/mariadb.service.
$ sudo systemctl status mariadb.service
● mariadb.service - Serveur de base de données MariaDB 10.5.8
   Loaded : chargé (/usr/lib/systemd/system/mariadb.service ; activé ; vendor preset : désactivé)
  Drop-In : /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active : active (running) since Thu 2020-12-31 13:20:04 IST ; 13s ago
     Docs : man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
 PID principal : 13521 (mariadbd)
   Statut : "Prend vos requêtes SQL maintenant..."
   CGroup : /system.slice/mariadb.service
           └─13521 /usr/sbin/mariadbd

Dec 31 13:20:04 centos7vm mariadbd<x><x><x><x><x><x><x><x>[13521]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] InnoDB : 10.5.8 started ; log sequence number 45118 ; transaction id 20
Dec 31 13:20:04 centos7vm mariadbd<x><x><x><x><x><x><x><x>[13521]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] Le plugin 'FEEDBACK' est désactivé.
Dec 31 13:20:04 centos7vm mariadbd[13521<x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] InnoDB : Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Dec 31 13:20:04 centos7vm mariadbd<x><x><x><x><x><x><x><x>[13521]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] InnoDB : Buffer pool(s) load completed at 201231 13:20:04
Dec 31 13:20:04 centos7vm mariadbd<x><x><x><x><x><x><x><x>[13521]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] Server socket created on IP : '::'.
Dec 31 13:20:04 centos7vm mariadbd<x><x><x><x><x><x><x><x>[13521]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] La lecture de toutes les entrées Master_info a réussi
Dec 31 13:20:04 centos7vm mariadbd<x><x><x><x><x><x><x><x>[13521]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] Added new Master_info '' to hash table
Dec 31 13:20:04 centos7vm mariadbd[13521<x><x><x><x><x><x><x><x>]</x></x></x></x></x></x></x></x>: 2020-12-31 13:20:04 0 [Note] /usr/sbin/mariadbd : prêt pour les connexions.
Dec 31 13:20:04 centos7vm mariadbd<x><x><x><x><x><x><x><x>[13521]</x></x></x></x></x></x></x></x>: Version : '10.5.8-MariaDB' socket : '/var/lib/mysql/mysql.sock' port : 3306 Serveur MariaDB
Dec 31 13:20:04 centos7vm systemd[1]: Démarrage du serveur de base de données MariaDB 10.5.8.
$

Sécurisation de MariaDB

La première étape après l’installation de MariaDB consiste à sécuriser son déploiement en définissant un mot de passe root, en désactivant la connexion root à distance, en supprimant la base de données de test ainsi que les utilisateurs anonymes, et enfin en rechargeant les privilèges.

Exécutez la commande suivante pour renforcer MariaDB :

sudo mysql_secure_installation

Vous pouvez suivre les invites par défaut avec les actions suggérées à moins que vous n’ayez un besoin spécifique de vous en écarter.

Résultat :

$ sudo mysql_secure_installation

NOTE : L'EXECUTION DE TOUTES LES PARTIES DE CE SCRIPT EST RECOMMANDÉE POUR TOUS LES SERVEURS MariaDB
      EN PRODUCTION !  VEUILLEZ LIRE ATTENTIVEMENT CHAQUE ÉTAPE !

Afin de se connecter à MariaDB pour le sécuriser, nous aurons besoin du mot de passe actuel de l'utilisateur root
de l'utilisateur root. Si vous venez d'installer MariaDB, et que vous n'avez pas
et que vous n'avez pas encore défini le mot de passe de l'utilisateur root, vous devriez simplement appuyer sur enter ici.

Entrez le mot de passe actuel de l'utilisateur root (enter pour aucun) :
OK, le mot de passe a été utilisé avec succès, vous pouvez continuer...

Définir le mot de passe root ou utiliser unix_socket permet de s'assurer que personne ne peut se connecter à l'utilisateur root de MariaDB sans les autorisations nécessaires
ne peut se connecter à l'utilisateur racine de MariaDB sans l'autorisation appropriée.

Votre compte root est déjà protégé, vous pouvez donc répondre 'n' en toute sécurité.

Passer à l'authentification unix_socket [Y/n] n
 ... sauter.

Votre compte root est déjà protégé, vous pouvez donc répondre 'n' en toute sécurité.

Modifier le mot de passe root ? [O/n] n
 ... sauter.

Par défaut, une installation MariaDB a un utilisateur anonyme, ce qui permet à n'importe qui de se connecter à MariaDB sans avoir besoin d'avoir un compte d'utilisateur créé pour lui
de se connecter à MariaDB sans avoir à créer un compte utilisateur pour eux
pour eux.  Ceci n'est prévu que pour les tests et pour faciliter l'installation
se déroule plus facilement.  Vous devez les supprimer avant de passer à un
dans un environnement de production.

Supprimer les utilisateurs anonymes ? [O/n] O
 ... Succès !

Normalement, l'utilisateur root ne devrait être autorisé à se connecter qu'à partir de 'localhost'.  Cela permet de s'assurer que
cela permet de s'assurer que quelqu'un ne peut pas deviner le mot de passe de l'utilisateur root depuis le réseau.

Interdire la connexion de l'utilisateur root à distance ? [O/n] O
 ... Succès !

Par défaut, MariaDB est livré avec une base de données nommée 'test' à laquelle tout le monde peut accéder
accéder.  Cette base de données n'est destinée qu'à des fins de test et doit être supprimée
avant de passer à un environnement de production.

Supprimer la base de données test et son accès ? [O/n] O
 - Suppression de la base de données de test...
 ... Succès !
 - Suppression des privilèges sur la base de données de test...
 ... Succès !

Le rechargement des tables de privilèges garantit que toutes les modifications apportées jusqu'à présent
prendront effet immédiatement.

Recharger les tables de privilèges maintenant ? [O/n] O
 ... Succès !

Nettoyage...

C'est fait !  Si vous avez suivi toutes les étapes ci-dessus, votre installation MariaDB
devrait maintenant être sécurisée.

Merci d'utiliser MariaDB !
$

Ici, nous allons utiliser l’authentification du système, donc nous n’avons pas mis en place un mot de passe racine séparé pour MariaDB, car il est déjà sécurisé. Si vous en avez besoin, vous pouvez toujours définir un mot de passe racine séparé.

Configurer la validation

Pour vérifier votre installation de MariaDB, exécutez (spécifiez le mot de passe que vous avez défini lors de l’exécution de mysql_secure_installation ou, si vous l’avez ignoré à ce moment-là, utilisez les informations d’identification de la racine de votre système) :

sudo mysqladmin -u root -p version
Entrez le mot de passe :
mysqladmin Ver 9.1 Distrib 10.5.8-MariaDB, pour Linux sur x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab et autres.

Version du serveur 10.5.8-MariaDB
Protocole version 10
Connexion Localhost via UNIX socket
Socket UNIX /var/lib/mysql/mysql.sock
Temps de disponibilité : 53 min 17 sec

Threads : 2 Questions : 77 Requêtes lentes : 0 Ouvertures : 20 Tables ouvertes : 14 Requêtes par seconde en moyenne : 0.024
$

Vous pouvez configurer un nouveau compte administrateur à la place de root comme indiqué ci-dessous (changez la valeur du mot de passe avec celui que vous avez l’intention de définir pour le compte administrateur ) :

$ sudo mariadb
Bienvenue sur le moniteur MariaDB.  Les commandes se terminent par ; ou \g.
Votre identifiant de connexion MariaDB est 44
Version du serveur : 10.5.8-MariaDB Serveur MariaDB

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab et autres.

Tapez 'help;' ou '\h' pour obtenir de l'aide. Tapez '\c' pour effacer la déclaration d'entrée actuelle.

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION ;
Requête OK, 0 ligne affectée (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES ;
Requête OK, 0 ligne affectée (0.000 sec)

MariaDB [(none)]> exit
Bye
$

Vérifiez l’accès avec le nouvel utilisateur admin en tant que (entrez le mot de passe tel que défini dans l’étape précédente) :

$ mysqladmin -u admin -p version
Entrez le mot de passe :
mysqladmin Ver 9.1 Distrib 10.5.8-MariaDB, pour Linux sur x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab et autres.

Version du serveur 10.5.8-MariaDB
Protocole version 10
Connexion Localhost via UNIX socket
Socket UNIX /var/lib/mysql/mysql.sock
Temps de disponibilité : 56 min 59 sec

Threads : 2 Questions : 83 Requêtes lentes : 0 Ouvertures : 20 Tables ouvertes : 14 Requêtes par seconde en moyenne : 0.024
$

Optimisation du système d’exploitation

Après avoir installé et sécurisé votre configuration MariaDB, vous devez prendre des mesures pour régler votre système d’exploitation et votre base de données afin d’obtenir des performances optimales. Ce réglage variera en fonction de la configuration de votre système, du type d’utilisation, du nombre d’utilisateurs et d’un certain nombre d’autres facteurs.

Du point de vue du système d’exploitation, certains paramètres peuvent être configurés pour MariaDB.

Paramètres du noyau Linux – Planificateur d’entrées-sorties

Les planificateurs d’entrées-sorties recommandés pour MariaDB sont noop et deadline. Pour vérifier, utilisez cat /sys/block/${DEVICE}/queue/scheduler

$ sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
$

Un changement temporaire peut être effectué en lançant la commande suivante et son effet, s’il existe, sera immédiat sur les performances du système :

sudo echo noop > /sys/block/sda/queue/scheduler

Pour le rendre persistant, vous devrez le configurer dans le fichier de configuration de GRUB comme indiqué ci-dessous dans /etc/default/grub, reconstruire GRUB et redémarrer le système.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Limites de ressources – Limite des fichiers ouverts

Linux limite généralement le nombre de descripteurs de fichiers que chaque processus peut ouvrir. Pour un système de BD actif, cette limite peut facilement être dépassée ou avoir un impact sur les performances. Sur de nombreux systèmes Linux, cette limite est fixée par défaut à 1024. En outre, il est possible d’opter pour des limites souples ou strictes.

Pour augmenter la limite, vous pouvez ajouter les lignes suivantes dans votre fichier /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535

Un redémarrage du système sera nécessaire après quoi l’utilisateur mysql pourra voir et utiliser les nouvelles limites. Ceci peut être vérifié comme suit :

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Limites de ressources – Taille du fichier principal

Linux limite la taille des fichiers core comme nous l’avons vu dans le cas précédent. Encore une fois, il y a une limite douce et une limite dure. Par défaut, la limite douce est fixée à 0, ce qui désactive effectivement la génération de fichiers core. Pour permettre la génération de fichiers core(d’autres configurations sont nécessaires pour la génération de dumps core), nous pouvons augmenter cette valeur dans /etc/security/limits.conf comme suit :

mysql soft core unlimited
mysql hard core illimité

Après le redémarrage du système, l’utilisateur mysql pourra voir les nouvelles valeurs en utilisant la commande ulimit comme suit :

$ ulimit -Sc
illimité
$ ulimit -Hc
illimité

Configurer l’échange

La valeur de swappiness dans Linux détermine la probabilité que le système échange une page de la mémoire vers l’espace de swap configuré sur le système. Habituellement, la valeur par défaut est fixée à 60, ce qui peut être vérifié à l’aide de :

sysctl vm.swappiness

Sa valeur peut varier de 0 à 100, une valeur plus faible signifiant une probabilité plus faible de permutation. Sur un serveur de base de données utilisant uniquement MariaDB, nous voudrions réduire cette valeur à 0 pour éviter d’utiliser le swap autant que possible. Notez qu’une valeur de 0 doit être définie avec prudence, en tenant compte d’autres facteurs de conception du système, car en cas d’utilisation élevée de la mémoire ou de charge d’E/S, il y a un risque que le noyau tue le processus hors mémoire (Out Of Memory, OOM).

Etant donné qu’une faible valeur de swappiness est recommandée pour les charges de travail des bases de données, et donc pour les bases de données MariaDB, il est recommandé de fixer la valeur de swappiness à 1. Vous pouvez ajouter la ligne suivante dans le fichier /etc/sysctl.conf pourrendre ce changement persistant :

vm.swappiness = 1

Les modifications prendront effet après le redémarrage du système, mais vous pouvez toujours le faire à l’avance à l’aide de la commande sysctl:

sysctl -w vm.swappiness=1

Optimisations du système de fichiers

Pour MariaDB, les meilleurs systèmes de fichiers Linux sont généralement considérés comme ext4, XFS et Btrfs qui sont tous inclus dans le noyau Linux principal et sont largement supportés. Ces systèmes de fichiers sont disponibles sur la plupart des distributions Linux. Chaque système de fichiers a ses propres propriétés et caractéristiques et peut être choisi en fonction des besoins après un examen approfondi.

En outre, il est peu probable que vous ayez besoin d’enregistrer le temps d’accès aux fichiers sur un serveur de base de données. Nous pouvons le désactiver pour améliorer les performances. Vous pouvez monter le système de fichiers concerné avec l’option noatime ou l’ajouter aux options de montage dans le fichier /etc/fstab pour le rendre persistant.

Optimisation de la base de données

Il existe plusieurs paramètres internes au fonctionnement de MariaDB qui peuvent être personnalisés en fonction de vos exigences et de vos besoins.

Nous allons en présenter quelques-uns ici.

MariaDB est principalement configuré par le fichier my.cnf.

Sous Ubuntu, vous pouvez trouver my.cnf à l’adresse suivante :

/etc/mysql/my.cnf

Sous CentOS, il se trouve à l’endroit suivant : /etc/mysql/my.cnf

/etc/my.cnf

Une documentation détaillée sur les variables disponibles dans le fichier de configuration peut être consultée ici.

Beaucoup de choses dépendent également du type de moteur utilisé par MariaDB, à savoir MyISAM et InnoDB ou XtraDB. Les deux ont leurs propres avantages et inconvénients et le choix dépend des exigences de la base de données et de l’application.

Nous devons définir innodb_buffer_pool_size à environ 80% de votre mémoire. Cela permet de s’assurer que 80 % de votre ensemble de travail est en mémoire.

Certains des autres paramètres importants à régler sont les suivants :

innodb_log_file_size
innodb_flush_method
innodb_thread_sleep_delay
innodb_adaptive_max_sleep_delay
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_max_dirty_pages_pct_lwm
innodb_read_ahead_threshold
innodb_thread_concurrency

Vous trouverez plus de détails sur le réglage des variables InnoDB ou XtraDB ici. Référez-vous à ce guide pour connaître toutes les options de réglage disponibles pour MariaDB.

Si vous êtes intéressé, consultez ces ressources pour apprendre SQL et NoSQL.

Conclusion

MariaDB est l’un des choix les plus populaires en matière de SGBD relationnel. Le fait qu’il soit open-source et qu’il dispose d’une communauté diversifiée lui confère un avantage supplémentaire.

Pour en savoir plus, consultez sa documentation qui comprend des sujets comme le SQL de base, la migration, l’administration de MariaDB, la haute disponibilité, l’optimisation des performances, les moteurs de stockage, la programmation et la personnalisation. Vous pouvez également désactiver la journalisation binaire si vous n’utilisez pas de cluster.