MySQL
| 🏠 Accueil | 📚 Index | 🐧 Linux | 🌐 Réseau | 🔒 Cybersécurité | 🖥️ Virtualisation | ✅ Checklists d'intervention | 📚 Tutoriels | 🤝 Services |
|---|

🔍 Présentation de MySQL
MySQL est un système de gestion de bases de données relationnelles, souvent abrégé en SGBDR. Il permet de stocker, organiser, rechercher et modifier des informations à l'aide du langage SQL.
MySQL est couramment utilisé avec des sites Web, des applications professionnelles et des outils de gestion. Il peut notamment servir de moteur de base de données pour des applications PHP.
Exemples d'utilisation :
- Stockage des comptes utilisateurs.
- Gestion des articles et des contenus d'un site Web.
- Enregistrement des données d'une application.
- Gestion des commandes et des clients.
- Stockage des informations d'un logiciel métier.
- Conservation des données utilisées par certaines applications auto-hébergées.
À retenir : MySQL stocke et organise les données. Une application, par exemple un site Web, se connecte à la base de données pour lire ou modifier ces informations.
🧩 1. Les éléments essentiels
⚙️ 2. Comment fonctionne MySQL ?
Une application envoie une requête au serveur MySQL. Le serveur vérifie les autorisations, exécute la requête et renvoie le résultat à l'application.
🌐 Application Web
🗄️ Serveur MySQL
💾 Tables et données
L'application présente les informations à l'utilisateur.
MySQL et MariaDB
MySQL et MariaDB sont deux systèmes de gestion de bases de données apparentés, mais distincts.
- MySQL est développé et distribué par Oracle.
- MariaDB est un projet distinct issu à l'origine de MySQL.
- Les deux systèmes partagent de nombreuses fonctionnalités, mais ne sont pas interchangeables dans tous les cas.
- Il faut vérifier la compatibilité de la version choisie avec l'application à héberger.
Conseil : pour installer une base de données destinée à une application, suivre en priorité la documentation de cette application.
🐧 3. Installer MySQL sur Ubuntu
Les commandes suivantes donnent un exemple d'installation du serveur MySQL sur Ubuntu. Vérifie la version d'Ubuntu et les exigences de l'application avant de procéder sur un serveur de production.
Étape 1 — Actualiser les paquets
sudo apt update
Cette commande actualise la liste des paquets disponibles dans les dépôts configurés.
Étape 2 — Installer MySQL
sudo apt install mysql-server
Le paquet installe le serveur MySQL proposé par les dépôts configurés. La version disponible dépend notamment de la version d'Ubuntu et des dépôts utilisés.
Étape 3 — Vérifier le service
sudo systemctl status mysql
Le service doit être actif pour accepter les connexions. Pour activer son démarrage automatique :
sudo systemctl enable mysql
Étape 4 — Lancer la configuration de sécurité
sudo mysql_secure_installation
Cet outil peut proposer plusieurs réglages de sécurité. Les questions et les possibilités dépendent de la version installée et de sa configuration.
Étape 5 — Ouvrir le client MySQL
Sur une installation Ubuntu utilisant l'authentification locale par socket pour le compte administrateur :
sudo mysql
La commande ouvre le client SQL avec les privilèges accordés au compte système. Le mode d'authentification peut différer si le serveur a été configuré autrement.
Attention : avant d'exécuter ces commandes sur un serveur hébergeant déjà des applications, vérifier la configuration existante et réaliser une sauvegarde. Ne pas réinstaller ou remplacer un moteur de base de données sans avoir contrôlé les dépendances.
⌨️ 4. Les commandes MySQL essentielles
Les exemples ci-dessous sont à exécuter dans le client MySQL, après connexion.
Afficher les bases de données
SHOW DATABASES;
Cette commande affiche les bases de données accessibles au compte connecté.
Créer une base de données
CREATE DATABASE atelier CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Cet exemple crée une base nommée `atelier` avec un jeu de caractères adapté à de nombreux textes multilingues.
Sélectionner une base
USE atelier;
Les requêtes suivantes s'appliquent alors à cette base, sauf indication contraire.
Créer une table
CREATE TABLE clients (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
email VARCHAR(190),
date_creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Cette table contient un identifiant, un nom, une adresse électronique et une date de création.
Ajouter un enregistrement
INSERT INTO clients (nom, email)
VALUES ('Dupont', 'dupont@example.com');
Cette commande ajoute un exemple de client. L'adresse utilisée est fictive.
Lire les données
SELECT * FROM clients;
La requête affiche les lignes de la table `clients`.
Modifier un enregistrement
UPDATE clients SET email = 'nouvelle-adresse@example.com' WHERE id = 1;
La clause `WHERE` permet de limiter la modification à la ligne visée. Sans cette clause, toutes les lignes de la table pourraient être modifiées.
Supprimer un enregistrement
DELETE FROM clients WHERE id = 1;
Cette commande supprime la ligne dont l'identifiant est égal à `1`. Vérifier les conditions de suppression avant d'exécuter ce type de requête.
Prudence avec UPDATE et DELETE : toujours contrôler la clause `WHERE`, vérifier la base sélectionnée et effectuer une sauvegarde avant une modification importante.
👤 5. Créer un utilisateur dédié
Une application ne doit pas utiliser le compte administrateur MySQL pour ses opérations courantes.
Il est préférable de créer un compte dédié et de lui accorder uniquement les droits nécessaires sur sa base.
Exemple de création d'un compte
Les commandes suivantes sont à adapter à l'application et à la méthode de connexion prévue.
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'REMPLACER_PAR_UN_SECRET_FORT'; GRANT SELECT, INSERT, UPDATE, DELETE ON atelier.* TO 'appuser'@'localhost'; SHOW GRANTS FOR 'appuser'@'localhost';
Dans cet exemple, l'utilisateur `appuser` peut lire, ajouter, modifier et supprimer des données dans la base `atelier`. Il ne reçoit pas automatiquement les droits d'administration du serveur.
Important :
- Remplacer le secret d'exemple par un mot de passe long, unique et protégé.
- Ne jamais publier un mot de passe réel dans une documentation.
- Accorder des privilèges supplémentaires uniquement si l'application en a besoin.
- Certains installateurs doivent créer ou modifier des tables ; leurs besoins peuvent donc différer des droits nécessaires au fonctionnement courant.
- Le compte est limité aux connexions provenant de `localhost`. Une connexion depuis une autre machine nécessite une configuration spécifique.
🖥️ 6. Administrer MySQL
Vérifier l'état du serveur
Depuis le terminal Ubuntu :
sudo systemctl status mysql
Pour redémarrer le service lorsque cela est nécessaire :
sudo systemctl restart mysql
Un redémarrage peut interrompre temporairement les applications connectées. Il faut vérifier les conséquences avant de l'effectuer en production.
Vérifier la version
Dans le client MySQL :
SELECT VERSION();
Cette commande indique la version du serveur auquel le client est connecté.
Afficher les bases et les tables
SHOW DATABASES; USE atelier; SHOW TABLES;
Ces commandes permettent de consulter les bases disponibles et les tables de la base sélectionnée, selon les droits du compte.
Consulter les journaux du service
Sur Ubuntu avec systemd :
sudo journalctl -u mysql --since today
Les journaux permettent de rechercher des erreurs de démarrage, de configuration ou de fonctionnement.
🔌 7. Connecter MySQL à une application Web
MySQL peut être utilisé par une application Web hébergée sur le même serveur ou sur une autre machine autorisée.
Dans une architecture classique :
Paramètres de connexion
Une application demande généralement les paramètres suivants :
- Hôte : `localhost` si la base est accessible localement et que l'application utilise ce mode de connexion.
- Port : généralement `3306` pour une connexion MySQL TCP standard.
- Nom de la base : par exemple `atelier`.
- Utilisateur : un compte dédié à l'application.
- Mot de passe : le secret associé à ce compte.
Les paramètres exacts dépendent du logiciel installé.
Sécurité : conserver les identifiants dans la configuration protégée de l'application ou dans un gestionnaire de secrets adapté. Ne pas les placer dans une page Web publique ni dans un dépôt de code accessible à tous.
🔐 8. Sécuriser un serveur MySQL
La sécurité d'une base de données est essentielle, car elle peut contenir des informations confidentielles ou indispensables au fonctionnement d'une application.
Utiliser des comptes distincts et limiter les autorisations au strict nécessaire.
Limiter les connexions aux machines autorisées et éviter d'exposer MySQL directement sur Internet.
Installer les mises à jour de sécurité adaptées et vérifier la compatibilité des applications.
Protéger les copies des bases de données et tester régulièrement leur restauration.
Bonnes pratiques
- Ne pas utiliser le compte administrateur dans les applications.
- Ne pas exposer le port TCP `3306` à Internet sans nécessité et sans protections adaptées.
- Préférer une connexion locale lorsque l'application et la base sont sur le même serveur.
- Si la connexion passe par le réseau, utiliser des contrôles d'accès adaptés et chiffrer les communications lorsque nécessaire.
- Protéger les fichiers de configuration contenant des identifiants.
- Surveiller les connexions et les erreurs.
- Tester les procédures de sauvegarde et de restauration.
- Prévoir une stratégie de mise à jour et de reprise après incident.
💾 9. Sauvegarder et restaurer une base
La sauvegarde d'une base de données permet de récupérer les informations après une panne, une erreur humaine ou un incident de sécurité.
Sauvegarder une base
Depuis le terminal Ubuntu, pour une base appelée `atelier` :
mysqldump -u appuser -p atelier > atelier.sql
Le programme demande le mot de passe dans le terminal. Le fichier `atelier.sql` contient une exportation logique des objets et des données accessibles au compte utilisé, selon ses privilèges et les options choisies.
Pour de nombreuses applications, un compte de sauvegarde dédié et des options adaptées sont préférables à un compte applicatif ordinaire.
Restaurer une sauvegarde
Sur une base cible déjà créée et après avoir vérifié le fichier :
mysql -u appuser -p atelier < atelier.sql
La restauration peut modifier les données de la base cible. Il faut vérifier que la destination est correcte et que les droits du compte sont suffisants.
Bonnes pratiques de sauvegarde
- Vérifier le code de retour de la tâche de sauvegarde.
- Contrôler que le fichier a été créé et qu'il est exploitable.
- Stocker les copies dans un emplacement protégé et distinct du serveur principal.
- Prévoir une rétention adaptée.
- Protéger les fichiers contre les accès non autorisés.
- Tester les restaurations dans un environnement de test.
- Pour une base volumineuse ou très sollicitée, choisir une méthode adaptée à la taille, au moteur de stockage et aux objectifs de disponibilité.
Voir aussi : Sauvegarde et Maintenance.
🛠️ 10. Dépannage courant
| Problème | Vérifications | Pistes de résolution |
|---|---|---|
| Le service MySQL ne démarre pas | État du service, journaux, espace disque et configuration. | Examiner les messages d'erreur avant de modifier la configuration ou de redémarrer. |
| Connexion refusée | Hôte, port, état du service et règles réseau. | Vérifier que le service écoute au bon endroit et que la connexion est autorisée. |
| Accès refusé à un utilisateur | Nom du compte, hôte d'origine, mot de passe et privilèges. | Vérifier le compte MySQL correspondant et accorder uniquement les droits nécessaires. |
| Base de données introuvable | Nom de la base et droits de l'utilisateur. | Vérifier l'orthographe du nom et l'existence de la base. |
| Disque presque plein | Espace disponible et taille des données ou journaux. | Identifier les fichiers volumineux et prévoir une extension ou un nettoyage contrôlé. |
| Application Web en erreur | Journaux de l'application, paramètres de connexion et état de MySQL. | Vérifier la configuration et la compatibilité avant de modifier les données. |
| Requêtes lentes | Requêtes exécutées, index, charge système et temps de réponse. | Analyser les requêtes et leur plan d'exécution avant d'ajuster les index ou la configuration. |
Commandes de diagnostic utiles
sudo systemctl status mysql sudo journalctl -u mysql --since today df -h
Dans le client MySQL :
SELECT VERSION(); SHOW DATABASES; SHOW FULL PROCESSLIST;
La commande `SHOW FULL PROCESSLIST` permet d'examiner les connexions et les requêtes en cours, selon les privilèges du compte.
📚 11. Checklist d'installation
[ ] Vérifier la version d'Ubuntu [ ] Vérifier la compatibilité de l'application [ ] Installer le paquet adapté [ ] Vérifier l'état du service MySQL [ ] Appliquer les réglages de sécurité nécessaires [ ] Créer la base de données [ ] Créer un compte applicatif dédié [ ] Limiter les privilèges de ce compte [ ] Vérifier les paramètres de connexion [ ] Configurer les sauvegardes [ ] Tester une restauration [ ] Documenter l'installation [ ] Prévoir les mises à jour et la supervision
📖 12. Lexique
| Terme | Définition |
|---|---|
| SGBDR | Système de gestion de bases de données relationnelles. |
| SQL | Langage utilisé pour interroger et manipuler des bases de données. |
| Table | Structure organisée en colonnes et en lignes. |
| Clé primaire | Colonne ou ensemble de colonnes identifiant de manière unique chaque ligne. |
| Index | Structure facilitant certaines recherches et opérations sur les données. |
| Requête | Instruction envoyée au serveur de base de données. |
| Privilège | Autorisation accordée à un compte sur un objet ou une opération. |
| Sauvegarde logique | Exportation des objets et des données sous une forme permettant leur réimportation. |
🔗 13. Voir aussi
🌐 14. Documentation officielle
- Documentation officielle MySQL
- MySQL 8.4 Reference Manual
- Guide du dépôt APT MySQL
- Documentation MariaDB