• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • 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 sur 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 sur 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 sur 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.

    Démarrage de 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.
    $

    Sécuriser 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.

    Validation de la configuration

    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
    $

    Optimisation du système d'exploitation

    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.confpour 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.

    Optimisation de la base de données

    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:

    /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.