Aller au contenu

MySQL

De Wiki Pat-Informatik
🏠 Accueil 📚 Index 🐧 Linux 🌐 Réseau 🔒 Cybersécurité 🖥️ Virtualisation ✅ Checklists d'intervention 📚 Tutoriels 🤝 Services
MySQL
MySQL
🗄️ MySQL — Base de données

Comprendre, installer, administrer et sécuriser un serveur de bases de données relationnelles.

🔍 Présentation de MySQL

Fichier:MySQL.png
MySQL — Système de gestion de bases de données

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

🗄️ Base de données
     Une base de données regroupe des objets permettant d'organiser les informations d'une application.
  • Tables
  • Vues
  • Index
  • Procédures et déclencheurs, selon les besoins
📋 Table
     Une table contient des données organisées en lignes et en colonnes.
  • Colonnes : les champs
  • Lignes : les enregistrements
  • Clés primaires
  • Relations entre tables
⌨️ SQL
     SQL est le langage utilisé pour interroger et manipuler les données.
  • SELECT : lire des données
  • INSERT : ajouter des données
  • UPDATE : modifier des données
  • DELETE : supprimer des données
👤 Utilisateurs et droits
     MySQL gère les comptes et leurs autorisations.
  • Comptes dédiés aux applications
  • Droits de lecture et d'écriture
  • Privilèges limités par base
  • Contrôle des connexions

⚙️ 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
Exemple : site PHP ou application métier
⬇ Requête SQL
   🗄️ Serveur MySQL
Authentification, droits et traitement des requêtes
⬇
   💾 Tables et données
Informations stockées et organisées
⬆ Résultat de la requête
   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 :

🌐 Serveur Web
Apache ou Nginx reçoit les requêtes HTTP/HTTPS.
⚙️ Application
PHP ou un autre environnement traite les demandes.
🗄️ MySQL
Le serveur de base de données stocke et renvoie les informations.

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.

🔑 Comptes et privilèges
   Utiliser des comptes distincts et limiter les autorisations au strict nécessaire.
🧱 Réseau et pare-feu
   Limiter les connexions aux machines autorisées et éviter d'exposer MySQL directement sur Internet.
🔄 Mises à jour
   Installer les mises à jour de sécurité adaptées et vérifier la compatibilité des applications.
💾 Sauvegardes
   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


Pat Informatik
Bases de données • Serveurs • Linux • Web • Sécurité