2022-10-16 11:55 Temps de lecture : 22 min

Comment installer et configurer MariaDB sur Ubuntu et CentOS

Découvrons ensemble comment installer et configurer MariaDB, un système de gestion de bases de données relationnelles (SGBDR) open source, réputé et basé sur MySQL.

Développé par une communauté active, il offre également la possibilité d'un support commercial. MariaDB a été conçu pour maintenir une compatibilité élevée avec MySQL, bien que certaines différences subsistent.

Dans cet article, nous allons examiner l'installation et la configuration de MariaDB sur Ubuntu 20.x ainsi que sur CentOS 7.x et 8.x. Enfin, nous aborderons les bonnes pratiques pour sécuriser et optimiser ses performances.

MariaDB sur Ubuntu

Pour Ubuntu 20.x, MariaDB est accessible directement via ses dépôts par défaut. Nous utiliserons l'outil de gestion de paquets apt pour effectuer cette tâche.

Commencez par actualiser les données des dépôts apt en exécutant la commande suivante :

$ sudo apt update

Une fois les informations du dépôt mises à jour, lancez cette commande :

$ sudo apt install mariadb-server

Cette action installera MariaDB ainsi que les paquets nécessaires. Confirmez avec 'O' (ou 'Y') toutes les sollicitations qui pourraient apparaître durant l'exécution de cette commande.

Do you want to continue? [Y/n] Y

MariaDB sur CentOS 7.x

Sur CentOS 7.x, la version de MariaDB disponible dans le dépôt CentOS par défaut est la 5.x. Nous allons installer la version la plus récente de MariaDB.

Pour cela, nous devons d'abord configurer un dépôt yum supplémentaire. MariaDB fournit une méthode simple en utilisant le script mariadb_repo_setup. Pour obtenir la configuration du dépôt, exécutez les commandes ci-dessous 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 configurer le dépôt yum nécessaire pour installer automatiquement la dernière version de MariaDB. Au moment de la rédaction de cet article, il s'agit de la version 10.x.

Si vous préférez la méthode manuelle, vous pouvez configurer un dépôt yum en créant un nouveau fichier de dépôt, par exemple :

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

Ajoutez ensuite les informations suivantes dans le fichier de dépôt et sauvegardez-le :

[mariadb]
name = 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, lancez la commande suivante :

$ sudo yum install MariaDB-server

Confirmez toutes les demandes qui apparaissent durant l'installation en entrant 'y' :

Is this ok [y/d/N]: y

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

MariaDB sur CentOS 8.x

Pour CentOS 8.x, la version accessible depuis les dépôts par défaut est la 10.3 ou plus récente. Nous pouvons installer directement MariaDB en utilisant la commande DNF :

sudo dnf install mariadb-server

Si vous souhaitez obtenir la dernière version, vous pouvez suivre la méthode manuelle expliquée dans la section précédente pour CentOS 7.x, cela devrait également fonctionner.

Démarrage de MariaDB

Sur une machine Ubuntu, le service MariaDB est lancé immédiatement après l'installation, tandis que pour CentOS, nous devons activer et démarrer manuellement les services concernés.

Dans tous les cas, que ce soit pour Ubuntu ou CentOS, exécutez les commandes ci-dessous afin de démarrer le service MariaDB, de l'activer au démarrage du système et de vérifier son statut :

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

Voici un exemple de résultat :

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  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/
 Main PID: 13521 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─13521 /usr/sbin/mariadbd

Dec 31 13:20:04 centos7vm mariadbd[13521]: 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[13521]: 2020-12-31 13:20:04 0 [Note] Plugin 'FEEDBACK' is disabled.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 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[13521]: 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[13521]: 2020-12-31 13:20:04 0 [Note] Server socket created on IP: '::'.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Reading of all Master_info entries succeeded
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Added new Master_info '' to hash table
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] /usr/sbin/mariadbd: ready for connections.
Dec 31 13:20:04 centos7vm mariadbd[13521]: Version: '10.5.8-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Dec 31 13:20:04 centos7vm systemd[1]: Started MariaDB 10.5.8 database server.
$

Sécurisation de MariaDB

La première étape après l'installation de MariaDB consiste à sécuriser son environnement en définissant un mot de passe root, en désactivant l'accès 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 ci-dessous pour renforcer la sécurité de MariaDB :

$ sudo mysql_secure_installation

Vous pouvez généralement suivre les instructions par défaut avec les actions suggérées, sauf si vous avez un besoin spécifique qui vous incite à dévier de cette configuration.

Voici un exemple de résultat :

$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
$

Dans cet exemple, nous avons utilisé l'authentification du système. Nous n'avons donc pas défini de mot de passe root séparé pour MariaDB car il est déjà protégé. Si vous le souhaitez, vous pouvez toujours configurer un mot de passe root distinct.

Vérification de la configuration

Pour vérifier votre configuration MariaDB, exécutez la commande suivante (spécifiez le mot de passe configuré lors de l'exécution de `mysql_secure_installation` ou, si ignoré, utilisez les informations d'identification root de votre système) :

$ sudo mysqladmin -u root -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 53 min 17 sec

Threads: 2  Questions: 77  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Vous pouvez créer un nouveau compte administrateur au lieu d'utiliser le compte root, comme indiqué ci-dessous (remplacez 'password' par le mot de passe que vous souhaitez définir pour le compte administrateur) :

$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 44
Server version: 10.5.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
$

Vérifiez l'accès avec le nouvel utilisateur admin en exécutant la commande suivante (saisissez le mot de passe défini à l'étape précédente) :

$ mysqladmin -u admin -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 56 min 59 sec

Threads: 2  Questions: 83  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Optimisation du système d'exploitation

Après l'installation et la sécurisation de votre configuration MariaDB, vous devriez prendre des mesures pour ajuster votre système d'exploitation et votre base de données en vue d'obtenir des performances optimales. Cet ajustement variera en fonction de la configuration de votre système, du type d'utilisation, du nombre d'utilisateurs et de nombreux autres facteurs.

Du point de vue du système d'exploitation, certains paramètres peuvent être configurés pour MariaDB. Nous allons les aborder ici.

Paramètres du noyau Linux - Planificateur d'E/S

Les planificateurs d'E/S recommandés pour MariaDB sont noop et deadline. Pour vérifier, utilisez la commande `cat /sys/block/${DEVICE}/queue/scheduler` :

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

Une modification temporaire peut être effectuée en exécutant la commande suivante. Son effet, le cas échéant, sera immédiat sur les performances du système :

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

Pour que ce changement soit permanent, vous devrez le configurer dans le fichier de configuration de GRUB, généralement `/etc/default/grub`, reconstruire GRUB et redémarrer le système.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Limites des ressources - Limite des fichiers ouverts

Linux limite par défaut le nombre de descripteurs de fichiers que chaque processus peut ouvrir. Pour un système de base de données actif, cette limite peut facilement être dépassée et ainsi affecter les performances. Sur de nombreux systèmes Linux, cette limite par défaut est de 1024. De plus, il existe une distinction entre les limites logicielles et strictes.

Pour augmenter cette 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 que l'utilisateur mysql pourra voir et utiliser ces nouvelles limites. Cela peut être vérifié comme suit :

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Limites des ressources - Taille du fichier principal

Linux, comme vu dans le cas précédent, limite aussi la taille des fichiers core. Là encore, il existe une limite souple et une limite stricte. Par défaut, la limite souple est définie à 0, ce qui désactive la génération des fichiers core. Pour activer la génération des fichiers core (d'autres configurations sont nécessaires pour les dumps core), nous pouvons augmenter cette valeur dans le fichier `/etc/security/limits.conf` comme ceci :

mysql soft core unlimited
mysql hard core unlimited

Après le redémarrage du système, l'utilisateur mysql pourra visualiser les nouvelles valeurs en utilisant la commande `ulimit` :

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Configuration de la zone d'échange

La valeur de "swappiness" sous Linux détermine la probabilité que le système échange une page de la mémoire vers l'espace d'échange (swap) configuré. Habituellement, la valeur par défaut est fixée à 60, ce que l'on peut vérifier avec la commande :

sysctl vm.swappiness

Sa valeur peut aller de 0 à 100, où une valeur plus basse indique une moindre probabilité d'échange. Sur un serveur de base de données exécutant uniquement MariaDB, nous devrions réduire cette valeur à 0 afin d'éviter autant que possible l'utilisation du swap. Il est important de noter que la définition d'une valeur de swappiness égale à 0 doit être faite avec prudence en tenant compte d'autres facteurs de conception du système. En effet, en cas d'utilisation élevée de la mémoire ou de charge d'E/S, il y a un risque que le processus "Out Of Memory" (OOM) soit tué par le noyau.

Étant donné qu'un paramètre de swappiness faible est recommandé pour les charges de travail de base de données et donc pour les bases de données MariaDB, il est recommandé de définir la valeur de swappiness à 1. Vous pouvez ajouter la ligne suivante dans `/etc/sysctl.conf` pour rendre cette modification permanente :

vm.swappiness = 1

Les modifications prendront effet après le redémarrage du système, bien que vous puissiez également les appliquer immédiatement en utilisant 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. Ils sont tous inclus dans le noyau Linux principal et sont largement pris en charge. Ces systèmes de fichiers sont accessibles sur la plupart des distributions Linux. Chacun possède ses particularités et peut être choisi en fonction de vos besoins spécifiques.

De plus, 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 désactiver cette fonctionnalité pour améliorer les performances. Vous pouvez monter le système de fichiers approprié avec l'option `noatime` ou l'ajouter dans les options de montage du fichier `/etc/fstab` pour rendre cette option permanente.

Optimisation de la base de données

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

Nous allons en aborder quelques-uns ici.

MariaDB est principalement configuré par le biais du fichier `my.cnf`.

Sur Ubuntu, le fichier `my.cnf` se trouve ici :

/etc/mysql/my.cnf

Sur CentOS, il se trouve ici :

/etc/my.cnf

Une documentation détaillée sur les variables disponibles pour le réglage dans le fichier de configuration est disponible ici.

Beaucoup dépend aussi du type de moteur utilisé par MariaDB, notamment MyISAM, InnoDB ou XtraDB. Ces moteurs ont chacun leurs avantages et leurs inconvénients et le choix de l'un dépend des exigences de la base de données et de l'application.

Nous devrions définir la valeur de `innodb_buffer_pool_size` à environ 80% de votre mémoire vive (RAM). Cela garantit que 80% de votre jeu de données est stocké en mémoire.

Voici quelques autres paramètres importants à régler :

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

Plus de détails sur le réglage des variables InnoDB ou XtraDB peuvent être trouvés ici. Consultez également ce guide pour connaître toutes les options de réglage disponibles pour MariaDB.

Si vous êtes intéressé, voici quelques ressources pour en apprendre davantage sur SQL et NoSQL.

Conclusion

MariaDB est un choix populaire en matière de SGBDR (Système de Gestion de Bases de Données Relationnelles). Son caractère open source, ainsi que l'existence d'une communauté active, constituent des atouts supplémentaires.

Pour en savoir plus, reportez-vous à sa Documentation. Vous y trouverez des sujets tels que le langage 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.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.