Apprenons à installer et configurer MariaDB, un populaire système de gestion de base de données relationnelle (SGBDR) MySQL.
Il est développé par la communauté et a l'option d'un soutien commercial. MariaDB a été conçue pour rester hautement compatible avec MySQL bien qu'il y ait quelques écarts.
Dans cet article, nous couvrirons l'installation et la configuration de MariaDB sur Ubuntu 20.x et CentOS 7.x / 8.x et à la fin, nous passerons en revue quelques bonnes pratiques pour sécuriser et améliorer ses performances.
MariaDB on Ubuntu
Sur Ubuntu 20.x, MariaDB est disponible directement à partir de ses référentiels par défaut. Nous utiliserons apt pour cette tâche.
Première mise à jour des données des référentiels apt par:
$ sudo apt update
Une fois les données du référentiel mises à jour, exécutez:
$ sudo apt install mariadb-server
Cela installera MariaDB et les packages requis. Confirmez avec «Y» pour toutes les invites que vous pourriez obtenir lors de l'exécution de la commande précédente.
Do you want to continue? [Y/n] Y
MariaDB on CentOS 7.x
Pour CentOS 7.x, la version MariaDB disponible à partir du référentiel CentOS par défaut est 5.x. Nous allons installer la dernière version disponible de MariaDB.
Pour cela, nous devons d'abord configurer un référentiel yum supplémentaire. MariaDB fournit un moyen simple d'utiliser le mariadb_repo_setup
scénario. Pour obtenir la configuration du référentiel, 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 configurera le référentiel yum requis pour installer automatiquement la dernière version de MariaDB. Au moment de la rédaction de cet article, il est 10.x.
Ou si vous souhaitez utiliser la méthode manuelle, vous pouvez configurer un référentiel yum manuel en créant un nouveau fichier de référentiel comme:
$ sudo vi /etc/yum.repos.d/MariaDB.repo
Ajoutez ensuite les détails suivants au fichier repo et enregistrez-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, exécutez la commande ci-dessous:
$ sudo yum install MariaDB-server
Confirmez toutes les invites qui s'affichent lors de l'installation en saisissant «y»:
Is this ok [y/d/N]: y
Ceci termine l'installation du serveur MariaDB et des packages dépendants.
MariaDB on CentOS 8.x
Pour CentOS 8.x, la version disponible à partir des référentiels par défaut est 10.3 ou plus récente. Nous pouvons directement installer MariaDB en utilisant le DNF commander:
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.
Starting MariaDB
Sur une machine Ubuntu, vous aurez le service MariaDB en cours d'exécution juste après l'installation, tandis que pour CentOS, nous devons activer et démarrer manuellement les services pertinents.
Dans tous les cas, pour Ubuntu ainsi que CentOS, exécutez les commandes ci-dessous pour démarrer le service MariaDB, activé au démarrage et vérifiez-le:
$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service
Sortie :
$ 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.
$
Securing MariaDB
Comme première étape après l'installation de MariaDB, nous devons 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 ci-dessous pour renforcer MariaDB:
$ sudo mysql_secure_installation
Vous pouvez suivre les invites par défaut avec des actions suggérées, sauf si vous avez une exigence spécifique de dévier.
Sortie :
$ 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!
$
Ici, nous utiliserons l'authentification du système, nous n'avons donc pas configuré de mot de passe root distinct pour MariaDB, car il est déjà sécurisé. Si vous en avez besoin, vous pouvez également configurer un mot de passe root distinct.
Setup Validation
Pour vérifier votre configuration MariaDB, exécutez (spécifiez le mot de passe que vous avez défini lors de l'exécution mysql_secure_installation
ou, si ignoré à ce moment-là, utilisez les informations d'identification racine 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 configurer un nouveau compte administrateur à la place de la racine comme indiqué ci-dessous (modifiez la valeur de password
avec celui que vous avez l'intention de définir admin
Compte):
$ 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 un nouveau admin
user as (entrez le password
comme 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
$
OS Optimization
Après l'installation et la sécurisation de votre configuration MariaDB, vous devez prendre des mesures pour régler votre système d'exploitation et votre base de données pour 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 système peuvent être configurés pour MariaDB dont nous parlerons maintenant.
Paramètres du noyau Linux - IO Scheduler
Les planificateurs d'E / S recommandés pour MariaDB sont noop
et deadline
. Pour vérifier l'utilisation 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 et son effet, le cas échéant, 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
, reconstruisez GRUB et redémarrez le système.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
Limites des 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 DB actif, cette limite peut facilement dépasser ou affecter les performances. Sur de nombreux systèmes Linux, cette limite est par défaut de 1024. De plus, il existe une option de limites souples et strictes.
Pour augmenter la limite, vous pouvez ajouter les lignes suivantes dans votre /etc/security/limits.conf
:
mysql soft nofile 65535
mysql hard nofile 65535
Un redémarrage du système sera nécessaire après mysql
l'utilisateur pourrait voir et utiliser les nouvelles limites. Cela peut être vérifié comme suit:
$ ulimit -Sn
65535
$ ulimit -Hn
65535
Limites des ressources - Taille du fichier principal
Linux limite la taille des fichiers core comme vu dans le cas précédent. Encore une fois, cela a une limite souple et dure et par défaut, la limite souple est définie sur 0, ce qui désactive efficacement la génération de fichiers de base. Pour permettre la génération de fichiers de base (autres configurations nécessaires pour la génération de vidage de mémoire), nous pouvons augmenter cette valeur dans /etc/security/limits.conf comme:
mysql soft core unlimited
mysql hard core unlimited
Après le redémarrage du système, mysql
l'utilisateur pourrait voir les nouvelles valeurs en utilisant ulimit
commande comme:
$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited
Configurer Swappiness
La valeur de swappiness sous Linux détermine la probabilité que le système permute une page de la mémoire vers l'espace d'échange configuré sur le système. Habituellement, la valeur par défaut est définie sur 60, ce qui peut être vérifié à partir de:
sysctl vm.swappiness
Sa valeur peut aller de 0 à 100, où une valeur inférieure signifie une probabilité moindre de permutation. Sur un serveur de base de données exécutant uniquement MariaDB, nous voudrions réduire cette valeur à 0 pour éviter autant que possible d'utiliser swap. Notez ici que la définition de la valeur de permutation de 0 doit être effectuée avec précaution compte tenu des autres facteurs de conception du système, car en cas d'utilisation de la mémoire élevée ou de charge d'E / S, il y a un risque de destruction du processus de mémoire insuffisante (OOM) par le noyau.
Étant donné qu'un paramètre de faible permutation est recommandé pour les charges de travail de base de données et, par conséquent, pour les bases de données MariaDB, il est recommandé de définir la permutation sur une valeur de 1. Vous pouvez ajouter la ligne ci-dessous dans /etc/sysctl.conf
pour rendre ce changement persistant:
vm.swappiness = 1
Les modifications prendront effet après le redémarrage du système, bien que vous puissiez toujours le faire à l'avance en utilisant sysctl
commander:
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 pris en charge. Ces systèmes de fichiers sont disponibles sur la plupart des distributions Linux. Chaque système de fichiers a ses propriétés et fonctionnalités uniques et peut être choisi en fonction des besoins après un examen approprié.
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 cela pour améliorer les performances. Vous pouvez monter le système de fichiers approprié avec noatime
option ou ajoutez-la dans les options de montage dans /etc/fstab
fichier pour le rendre persistant.
DB Optimization
Il existe plusieurs paramètres réglables internes au fonctionnement de MariaDB qui peuvent être personnalisés en fonction de ses exigences et de ses besoins.
Nous en discuterons quelques-uns ici.
MariaDB est principalement configuré par my.cnf
fichier.
On Ubuntu, Vous pouvez trouver my.cnf
à l'adresse suivante :
/etc/mysql/my.cnf
Pendant que CentOS il est situé à:
/etc/my.cnf
Une documentation détaillée sur les variables disponibles pour le réglage dans le fichier de configuration peut être consultée à partir de ici.
Cela dépend aussi beaucoup du type de moteur utilisé par MariaDB, à savoir, MyISAM
et InnoDB or XtraDB
. Les deux ont leurs propres avantages et inconvénients et en choisir un dépend des exigences de la base de données et de l'application.
Nous devrions définir innodb_buffer_pool_size
à environ 80% de votre mémoire. Cela garantit que 80% de votre jeu de travail est en mémoire.
Certains des autres paramètres ajustables importants sont:
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 à ceci guide pour 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 populaires en matière de SGBD relationnel. Étant open-source avec une communauté diversifiée ajoute encore à cela.
Pour en savoir plus, reportez-vous à son Documentation qui inclut des sujets comme SQL de base, migration, Administration MariaDB, haute disponibilité, réglage des performances, moteurs de stockage, programmation et personnalisation. Vous pouvez également vouloir désactiver la journalisation binaire si vous n'utilisez pas de cluster.