Aller au contenu
medium

Installer MySQL sur Linux (Debian, Ubuntu, Rocky, RHEL)

23 min de lecture

Les distributions Linux embarquent souvent MariaDB à la place de MySQL, ou une version MySQL figée pendant tout le cycle de vie de la distribution. Si vous voulez MySQL 8.4 LTS — la version Long Term Support avec 8 ans de correctifs de sécurité — le dépôt officiel Oracle est le chemin le plus fiable.

Ce guide vous accompagne de A à Z : ajout du dépôt, installation des paquets, vérification du service, sécurisation initiale et première connexion. En quelques minutes, vous aurez une instance MySQL opérationnelle, sécurisée et prête pour les guides suivants.

  • Ajouter le dépôt APT ou YUM officiel Oracle et installer MySQL 8.4 LTS
  • Comprendre la différence entre l’installation Debian (mot de passe défini à l’installation) et RHEL (mot de passe temporaire généré)
  • Vérifier que le service est actif avec systemctl et se connecter avec le client mysql
  • Sécuriser l’installation avec mysql_secure_installation (suppression utilisateur anonyme, désactivation accès root distant)
  • Identifier les fichiers de configuration et leur emplacement selon la distribution

Ce guide est votre point d’entrée si vous êtes dans l’une de ces situations :

  • Vous montez un serveur de développement ou de test et voulez MySQL (pas MariaDB)
  • Vous devez standardiser la version MySQL sur plusieurs machines (Debian + RHEL dans le même parc)
  • Vous préparez un lab pour suivre les guides configuration, sauvegarde ou réplication de cette section
  • Votre distribution fournit MariaDB par défaut et vous voulez installer le MySQL officiel d’Oracle
  • Vous déployez MySQL pour la première fois et voulez comprendre ce que l’installation crée sur le système

L’installation pose les fondations — la configuration fine et la sécurisation avancée sont dans les guides dédiés :

  • Un serveur Debian 12, Ubuntu 22.04+, Rocky Linux 9 ou RHEL 9 avec accès root ou sudo
  • Une connexion Internet (pour télécharger les paquets depuis les dépôts Oracle)
  • Aucune version de MariaDB installée — les paquets entrent en conflit. Si MariaDB est présent, désinstallez-le d’abord (voir section Dépannage)

Beaucoup de distributions Linux (Debian, Rocky Linux, Fedora) embarquent MariaDB à la place de MySQL dans leurs dépôts par défaut. MariaDB est un fork de MySQL créé en 2009 par le fondateur original de MySQL après le rachat par Oracle.

MySQL (Oracle)MariaDB
ÉditeurOracle CorporationMariaDB Foundation / MariaDB plc
Version LTS actuelle8.4 (support 8 ans)11.4 (support 5 ans)
Moteur par défautInnoDBInnoDB (fork Aria disponible)
RéplicationGTID, Group Replication, InnoDB ClusterGTID (format différent), Galera Cluster
Plugin auth par défautcaching_sha2_passwordmysql_native_password
Performance SchemaCompletPartiel (divergences)

Les deux systèmes partagent le protocole réseau et une grande partie de la syntaxe SQL, mais ils ne sont pas interchangeables en production. Les extensions spécifiques (Group Replication vs Galera, Performance Schema avancé, MySQL Shell) ne sont pas compatibles.

Ce guide porte sur MySQL officiel d’Oracle. Si vous voulez MariaDB, les commandes d’installation sont différentes.

  1. Télécharger le paquet de configuration du dépôt Oracle

    Le paquet mysql-apt-config ajoute les sources APT et les clés GPG d’Oracle. Téléchargez la version courante depuis la page APT officielle :

    Fenêtre de terminal
    cd /tmp
    wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb
  2. Installer le paquet de configuration

    Pour une installation non interactive qui sélectionne directement MySQL 8.4 LTS :

    Fenêtre de terminal
    sudo DEBIAN_FRONTEND=noninteractive dpkg -i mysql-apt-config_0.8.36-1_all.deb

    Ce paquet crée le fichier /etc/apt/sources.list.d/mysql.list avec la bonne URL et la clé GPG Oracle.

  3. Mettre à jour les sources et installer MySQL

    Fenêtre de terminal
    sudo apt update
    sudo apt install -y mysql-server

    L’installation tire automatiquement les dépendances : mysql-client, mysql-common, mysql-community-server, mysql-community-client.

  4. Vérifier que le service est actif

    Fenêtre de terminal
    sudo systemctl status mysql
    ● mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; preset: enabled)
    Active: active (running) since Mon 2026-04-13 08:49:23 UTC; 1min ago
    Docs: man:mysqld(8)
    http://dev.mysql.com/doc/refman/en/using-systemd.html
    Process: 4498 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
    Main PID: 4521 (/usr/sbin/mysqld)
    Status: "Server is operational"
    Tasks: 39 (limit: 2314)
    Memory: 364.2M
    CPU: 3.241s
    CGroup: /system.slice/mysql.service
    └─4521 /usr/sbin/mysqld

Le service MySQL s’appelle mysql sur Debian/Ubuntu et mysqld sur RHEL/Rocky :

Fenêtre de terminal
# État du service
sudo systemctl status mysql
# Arrêter / démarrer / redémarrer
sudo systemctl stop mysql
sudo systemctl start mysql
sudo systemctl restart mysql
# Activer le démarrage au boot
sudo systemctl enable mysql

Voici ce que l’installation Oracle pose sur le système (Debian) :

Fenêtre de terminal
dpkg -l 'mysql*' | grep '^ii'
ii mysql-apt-config 0.8.36-1 all Auto configuration for MySQL APT Repo.
ii mysql-client 8.4.5-1debian12 amd64 MySQL Client meta package for v8.4
ii mysql-common 8.4.5-1debian12 amd64 MySQL Common
ii mysql-community-client 8.4.5-1debian12 amd64 MySQL Client
ii mysql-community-server 8.4.5-1debian12 amd64 MySQL Server
ii mysql-server 8.4.5-1debian12 amd64 MySQL Server meta package for v8.4
PaquetContenu
mysql-community-serverLe serveur mysqld, les fichiers de configuration, les scripts systemd
mysql-community-clientLes outils client : mysql, mysqldump, mysqladmin, mysqlbinlog
mysql-commonFichiers de configuration partagés
mysql-apt-configGestion du dépôt Oracle (sélection de version)

L’emplacement de la configuration dépend de la distribution :

DistributionConfiguration serveurDatadir
Debian / Ubuntu/etc/mysql/mysql.conf.d/mysqld.cnf/var/lib/mysql/
RHEL / Rocky/etc/my.cnf/var/lib/mysql/

MySQL lit ses fichiers de configuration dans un ordre précis :

Fenêtre de terminal
mysqld --verbose --help 2>/dev/null | grep -A1 "Default options"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

Sur Debian, le fichier principal /etc/mysql/my.cnf inclut les fichiers de /etc/mysql/conf.d/ et /etc/mysql/mysql.conf.d/ :

/etc/mysql/
├── my.cnf → Fichier principal (inclut conf.d/ et mysql.conf.d/)
├── conf.d/
│ └── mysql.cnf → Options du client mysql
└── mysql.conf.d/
└── mysqld.cnf → Configuration du serveur mysqld

Voici le contenu par défaut de mysqld.cnf (les paramètres essentiels) :

Fenêtre de terminal
grep -v '^#\|^$' /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log

La connexion locale passe par un socket Unix — c’est le comportement par défaut quand vous ne spécifiez pas de -h :

Fenêtre de terminal
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.5 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Vérifiez la version et la connexion :

SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.4.5 |
+-----------+
\s
--------------
mysql Ver 8.4.5 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 8
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.4.5 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 15 min 32 sec

Connection: Localhost via UNIX socket confirme que la connexion passe par le socket, sans réseau.

Vérifier les paramètres clés après installation

Section intitulée « Vérifier les paramètres clés après installation »
SELECT @@innodb_buffer_pool_size / 1024 / 1024 AS buffer_pool_mb,
@@max_connections,
@@bind_address,
@@log_bin,
@@gtid_mode;
+----------------+-----------------+--------------+---------+-----------+
| buffer_pool_mb | max_connections | bind_address | log_bin | gtid_mode |
+----------------+-----------------+--------------+---------+-----------+
| 128 | 151 | 127.0.0.1 | 1 | OFF |
+----------------+-----------------+--------------+---------+-----------+
ParamètreValeur par défautCe que ça signifie
innodb_buffer_pool_size128 MoCache mémoire InnoDB — beaucoup trop petit pour la production
max_connections151Maximum 151 connexions simultanées
bind_address127.0.0.1MySQL n’écoute que localement — pas d’accès réseau distant
log_binON (MySQL 8.4)Le binary log est activé par défaut
gtid_modeOFFGTID désactivé par défaut — à activer pour la réplication

Vérifiez le plugin d’authentification des comptes existants :

SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
+------+-----------+-----------------------+
| user | host | plugin |
+------+-----------+-----------------------+
| root | localhost | caching_sha2_password |
+------+-----------+-----------------------+

MySQL fournit un script interactif qui applique les premières mesures de sécurité :

Fenêtre de terminal
sudo mysql_secure_installation

Le script pose plusieurs questions selon votre méthode d’installation. Sur les installations RPM/YUM, le composant validate_password est souvent déjà installé et activé au premier démarrage — la question correspondante n’apparaît alors pas.

QuestionRéponse recommandéePourquoi
Setup VALIDATE PASSWORD component?Yes (si proposé)Active la politique de complexité des mots de passe
Password validation policyMEDIUM (1)Exige longueur + majuscules + chiffres + caractères spéciaux
Change root password?No (si déjà changé)Inutile si vous venez de le définir à l’installation
Remove anonymous users?YesSupprime les comptes sans nom qui permettent une connexion sans authentification
Disallow root login remotely?YesEmpêche la connexion root depuis un autre serveur
Remove test database?YesSupprime la base test accessible à tous
Reload privilege tables?YesApplique immédiatement les changements

Après exécution, vérifiez qu’il ne reste plus de compte anonyme :

SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

Quatre comptes système et le compte root — pas de compte anonyme, pas de compte root@% (distant).

Ne travaillez pas au quotidien avec le compte root. Créez un compte dédié :

CREATE USER 'labadmin'@'localhost' IDENTIFIED BY 'MotDePasseFort!2026';
GRANT ALL PRIVILEGES ON *.* TO 'labadmin'@'localhost' WITH GRANT OPTION;

Pour un compte qui doit se connecter depuis le réseau (lab, développement) :

CREATE USER 'labadmin'@'%' IDENTIFIED BY 'MotDePasseFort!2026';
GRANT ALL PRIVILEGES ON *.* TO 'labadmin'@'%' WITH GRANT OPTION;

Si vous suivez les guides de cette section avec un lab KVM, le dépôt lab-mysql automatise l’installation complète :

Fenêtre de terminal
cd ~/Projets/lab-mysql
# Tout déployer en une commande
make all

Cette commande :

  1. Télécharge l’image Debian 12 cloud
  2. Génère le cloud-init avec votre clé SSH
  3. Crée la VM KVM (mysql-lab, 192.168.122.70)
  4. Installe MySQL 8.4 LTS depuis le dépôt Oracle
  5. Charge les données d’exemple (base labdb avec tables DevOps)

Pour vous connecter au lab :

Fenêtre de terminal
make ssh # SSH sur la VM
make status # Vérifie MySQL et les bases

Le guide Configuration et les suivants s’appuient sur ce lab.

Consultez les logs d’erreurs :

Fenêtre de terminal
# Debian / Ubuntu
sudo cat /var/log/mysql/error.log | tail -30
# RHEL / Rocky
sudo cat /var/log/mysqld.log | tail -30
# Ou via journalctl
sudo journalctl -u mysql --no-pager -n 30 # Debian
sudo journalctl -u mysqld --no-pager -n 30 # RHEL

Causes fréquentes :

SymptômeCause probableSolution
[ERROR] Can't start server: Bind on TCP/IP port: Address already in useUn autre processus utilise le port 3306ss -tlnp | grep 3306 pour identifier le conflit
[ERROR] --initialize specified but the data directory has files in itLe datadir contient déjà des fichiersSoit supprimer /var/lib/mysql/*, soit utiliser un autre datadir
[ERROR] InnoDB: Unable to lock ./ibdata1Une autre instance mysqld tourne déjàps aux | grep mysqld et arrêter l’instance en conflit
Service introuvableMauvais nom de servicemysql (Debian) vs mysqld (RHEL)

Si vous perdez le mot de passe root, vous pouvez le réinitialiser en mode maintenance :

  1. Arrêter MySQL

    Fenêtre de terminal
    sudo systemctl stop mysql
  2. Démarrer en mode skip-grant-tables

    Fenêtre de terminal
    sudo mysqld --skip-grant-tables --skip-networking --user=mysql &

    L’option --skip-networking empêche toute connexion réseau pendant cette opération sensible.

  3. Se connecter sans mot de passe et réinitialiser

    Fenêtre de terminal
    mysql -u root
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NouveauMotDePasse';
  4. Arrêter le processus et redémarrer normalement

    Fenêtre de terminal
    sudo kill $(cat /var/run/mysqld/mysqld.pid)
    sudo systemctl start mysql

Si vous obtenez une erreur de conflit de paquets à l’installation :

Fenêtre de terminal
# Lister les paquets MariaDB installés
dpkg -l | grep mariadb
# Désinstaller MariaDB (les données sont conservées sauf avec purge)
sudo apt remove --purge mariadb-server mariadb-client mariadb-common
# Nettoyer le datadir si nécessaire
sudo rm -rf /var/lib/mysql/*
# Réinstaller MySQL
sudo apt update
sudo apt install -y mysql-server
  • Utilisez les dépôts Oracle pour obtenir MySQL 8.4 LTS — les dépôts de distribution fournissent souvent MariaDB ou une version ancienne de MySQL.
  • Sur Debian/Ubuntu, l’installateur propose de définir le mot de passe root (laisser vide active l’authentification par socket Unix). Sur RHEL/Rocky, un mot de passe temporaire est généré dans /var/log/mysqld.log.
  • Le service s’appelle mysql sur Debian et mysqld sur RHEL — ne confondez pas les deux.
  • Exécutez mysql_secure_installation immédiatement après l’installation pour supprimer les comptes anonymes et la base test.
  • Le plugin d’authentification par défaut est caching_sha2_password (SHA-256) — plus sécurisé que l’ancien mysql_native_password.
  • La configuration serveur est dans /etc/mysql/mysql.conf.d/mysqld.cnf (Debian) ou /etc/my.cnf (RHEL).
  • Le buffer pool à 128 Mo par défaut est insuffisant pour la production — le guide Configuration détaille le dimensionnement.
  • Créez un compte dédié pour le travail quotidien — n’utilisez root que pour l’administration système.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn