Comment installer, sécuriser et optimiser les performances du serveur de base de données MariaDB

A database server is an critical component of the network infrastructure necessary for today’s applications. Without the ability to store, retrieve, update, and delete data (when needed), the usefulness and scope of web and desktop apps becomes very limited.

Install , Secure and Performance Tuning of MariaDB Server

De plus, savoir installer, gérer et configurer un serveur de base de données (afin qu’il fonctionne comme prévu) est une compétence essentielle que tout administrateur système doit posséder.

Dans cet article, nous passerons brièvement en revue la manière de procéder à l’installation et à la sécurisation d’un serveur MariaDB, avant d’expliquer comment le configurer.

Installation et sécurisation d’un serveur MariaDB

Dans CentOS 7.x, MariaDB a remplacé MySQL, qui peut encore être trouvé dans Ubuntu (ainsi que MariaDB). La même chose est vraie pour openSUSE.

Pour la concision, nous n’utiliserons que MariaDB dans ce tutoriel, mais veuillez noter que, outre le fait qu’ils portent différents noms et différentes philosophies de développement, les deux Systèmes de Gestion de Base de Données relationnels (abrégés en SGBD) sont presque identiques.

Cela signifie que les commandes clientes sont les mêmes sur MySQL et MariaDB, et les fichiers de configuration portent les mêmes noms et sont situés aux mêmes endroits.

Pour installer MariaDB, faites :

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# yum update && yum install mariadb mariadb-server # CentOS 

--------------- On Debian and Ubuntu --------------- 
$ sudo aptitude update && sudo aptitude install mariadb-client mariadb-server 

--------------- On openSUSE --------------- 
# zypper update && zypper install mariadb mariadb-tools # openSUSE

Notez que, dans Ubuntu, vous serez invité à entrer un mot de passe pour l’utilisateur racine du SGBD.

Une fois les paquets précédemment mentionnés installés, assurez-vous que le service de base de données est en cours d’exécution et a été activé pour démarrer à l’boot (dans CentOS et openSUSE, vous devrez effectuer cette opération manuellement, tandis que dans Ubuntu, le processus d’installation se charge de cela pour vous).

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
# systemctl start mariadb && systemctl enable mariadb 

--------------- On openSUSE --------------- 
# systemctl start mysql && systemctl enable mysql

Ensuite, exécutez le script mysql_secure_installation. Ce processus vous permettra de :

  1. définir / réinitialiser le mot de passe pour l’utilisateur root de RDBMS
  2. supprimer les connexions anonymes (permettant ainsi uniquement aux utilisateurs disposant d’un compte valide de se connecter au RDBMS)
  3. désactiver l’accès root pour les machines autres que localhost
  4. supprimer la base de données de test (à laquelle n’importe qui peut accéder)
  5. activer les modifications associées aux points 1 à 4.

Pour une description plus détaillée de ce processus, vous pouvez vous référer à la section Post-installation dans Installer la base de données MariaDB dans RHEL/CentOS/Fedora et Debian/Ubuntu.

Configuration du serveur MariaDB

Les options de configuration par défaut sont lues dans les fichiers suivants dans l’ordre donné : /etc/mysql/my.cnf, /etc/my.cnf, et ~/.my.cnf.

Le plus souvent, seul /etc/my.cnf existe. C’est sur ce fichier que nous allons définir les paramètres à l’échelle du serveur (qui peuvent être remplacés par les mêmes paramètres dans ~/.my.cnf pour chaque utilisateur).

La première chose à noter à propos de my.cnf est que les paramètres sont organisés en catégories (ou groupes) où chaque nom de catégorie est encadré de crochets.

Les configurations système du serveur sont données dans la section [mysqld], où vous trouverez généralement uniquement les deux premiers paramètres du tableau ci-dessous. Le reste concerne d’autres options fréquemment utilisées (lorsqu’indiqué, nous changerons la valeur par défaut par une valeur personnalisée de notre choix) :

Setting and description Default value
datadir is the directory where the data files are stored. datadir=/var/lib/mysql
socket indicates the name and location of the socket file that is used for local client connections. Keep in mind that a socket file is a resource that is utilized to pass information between applications. socket=/var/lib/mysql/mysql.sock
bind_address is the address where the database server will listen on for TCP/IP connections. If you need your server to listen on more than one IP address, leave out this setting (0.0.0.0 which means it will listen on all IP addresses assigned to this specific host).

Nous allons changer cela pour indiquer au service de n’écouter que son adresse principale (192.168.0.13) :

bind_address=192.168.0.13

bind_address=0.0.0.0
port represents the port where the database server will be listening.

Nous allons remplacer la valeur par défaut (3306) par 20500 (mais nous devons nous assurer qu’aucun autre service n’utilise ce port) :
port=20500

Alors que certaines personnes soutiennent que la sécurité par l’obscurité n’est pas une bonne pratique, changer les ports d’application par défaut pour des ports plus élevés est une méthode rudimentaire mais efficace pour dissuader les scans de ports.

port=3306
innodb_buffer_pool_size is the buffer pool (in bytes) of memory that is allocated for data and indexes that are accessed frequently when using Innodb (which is the default in MariaDB) or XtraDB as storage engine.

Nous allons remplacer la valeur par défaut par 256 Mo :

innodb_buffer_pool_size=256M

innodb_buffer_pool_size=134217728
skip_name_resolve indicates whether hostnames will be resolved or not on incoming connections. If set to 1, as we will do in this guide, only IP addresses.

À moins que vous n’ayez besoin des noms d’hôtes pour déterminer les autorisations, il est conseillé de désactiver cette variable (afin d’accélérer les connexions et les requêtes) en lui attribuant la valeur 1 :

skip_name_resolve=1

skip_name_resolve=0
query_cache_size represents the size (in bytes) available to the query cache in disk, where the results of SELECT queries are stored for future use when an identical query (to the same database and using the same protocol and same character set) is performed.

Vous devriez choisir une taille de cache de requêtes qui correspond à vos besoins en fonction de 1) le nombre de requêtes répétitives et 2) le nombre approximatif d’enregistrements que ces requêtes répétitives sont censées renvoyer. Nous fixerons cette valeur à 100 Mo pour le moment :

query_cache_size=100M

query_cache_size=0 (which means it is disabled by default)
max_connections is the maximum number of simultaneous client connections to the server. We will set this value to 30:
max_connections=30Each connection will use a thread, and thus will consume memory. Take this fact into account while setting max_connections.
max_connections=151
thread_cache_size indicates the numbers of threads that the server allocates for reuse after a client disconnects and frees thread(s) previously in use. In this situation, it is cheaper (performance-wise) to reuse a thread than instantiating a new one.

Encore une fois, cela dépend du nombre de connexions que vous prévoyez. Nous pouvons fixer cette valeur en toute sécurité à la moitié du nombre de max_connections :

thread_cache_size=15

thread_cache_size=0 (disabled by default)

Dans CentOS, nous devrons indiquer à SELinux d’autoriser MariaDB à écouter sur un port non standard (20500) avant de redémarrer le service :

# yum install policycoreutils-python
# semanage port -a -t mysqld_port_t -p tcp 20500

Ensuite, redémarrez le service MariaDB.

Optimisation des performances de MariaDB

Pour nous aider à vérifier et à ajuster la configuration selon nos besoins spécifiques, nous pouvons installer mysqltuner (un script qui fournira des suggestions pour améliorer les performances de notre serveur de base de données et accroître sa stabilité) :

# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xzf master

Ensuite, changez de répertoire vers le dossier extrait de la archive tar (la version exacte peut différer dans votre cas) :

# cd major-MySQLTuner-perl-7dabf27

et lancez-le (vous serez invité à entrer les informations de connexion de votre compte administrateur MariaDB)

# ./mysqltuner.pl

La sortie du script est déjà très interessante, mais passons à la fin où les variables à ajuster sont listées avec la valeur recommandée :

MariaDB Performance Tunning

Le paramètre query_cache_type indique si le cache de requête est désactivé (0) ou activé (1). Dans ce cas, mysqltuner nous conseille de le désactiver.

Alors pourquoi est-il recommandé de le désactiver maintenant ? La raison est que le cache de requête est utile principalement dans les scénarios à haut niveau de lecture / bas niveau d’écriture (ce qui n’est pas notre cas, car nous venons d’installer le serveur de base de données).

AVERTISSEMENT : Avant de faire des modifications à la configuration d’un serveur de production, il est fortement recommandé de consulter un administrateur de base de données expert pour s’assurer que une recommandation de mysqltuner ne fera pas de dégâts à une configuration existante.

Récapitulatif

Dans cet article, nous avons expliqué comment configurer un serveur de base de données MariaDB après l’avoir installé et sécurisé. Les variables de configuration répertoriées dans le tableau ci-dessus ne sont que quelques paramètres que vous voudrez peut-être prendre en compte lors de la préparation du serveur pour une utilisation ultérieure ou lors de son réglage. Consultez toujours la documentation officielle de MariaDB avant d’apporter des modifications ou consultez nos conseils d’optimisation des performances de MariaDB :

Ne manquez pas : 15 conseils utiles d’optimisation des performances de MariaDB

Comme toujours, n’hésitez pas à nous faire part de vos questions ou commentaires sur cet article. Y a-t-il d’autres paramètres de serveur que vous aimez utiliser ? N’hésitez pas à les partager avec le reste de la communauté en utilisant le formulaire de commentaire ci-dessous.

Source:
https://www.tecmint.com/install-secure-performance-tuning-mariadb-database-server/