Cours Détaillé : Administration des Bases de Données MySQL
Volume horaire : 30 heures (2 crédits) - CM, TD, TP
1. Introduction
1.1 Qu’est-ce qu’une base de données ?
Une base de données est un ensemble structuré de données stockées de manière organisée permettant leur consultation, modification et gestion efficace. MySQL est un système de gestion de bases de données relationnelles (SGBDR) utilisant le langage SQL.
1.2 Pourquoi MySQL ?
- Open Source : Gratuité et transparence du code
- Performance : Rapidité et efficacité reconnues
- Fiabilité : Utilisé par de grandes entreprises
- Portabilité : Fonctionne sur plusieurs systèmes d’exploitation
- Communauté : Support important et documentation riche
1.3 Domaines d’application
- Applications web (LAMP/WAMP)
- Commerce électronique
- Systèmes de gestion d’entreprise
- Applications mobiles
- Big Data et analytics
2. Présentation de MySQL, des produits et services
2.1 Éditions MySQL
MySQL Community Edition (Gratuite)
- MySQL Server
- MySQL Workbench
- MySQL Shell
- MySQL Router
MySQL Enterprise Edition (Payante)
- Fonctionnalités avancées de sécurité
- MySQL Enterprise Monitor
- MySQL Enterprise Backup
- Support technique Oracle
2.2 Outils et composants MySQL
MySQL Workbench
-- Interface graphique pour :
- Modélisation de données
- Développement SQL
- Administration serveur
- Migration de données
MySQL Shell
- Interface en ligne de commande avancée
- Support JavaScript, Python et SQL
- Mode interactif et batch
2.3 Services Cloud MySQL
- Amazon RDS for MySQL
- Google Cloud SQL
- Azure Database for MySQL
- Oracle MySQL Cloud Service
3. Architecture de MySQL
3.1 Architecture en couches
┌─────────────────────────────────────┐
│ Couche de connexion/Client │
├─────────────────────────────────────┤
│ Couche des services │
│ (Parseur, Optimiseur, Cache...) │
├─────────────────────────────────────┤
│ Couche moteur de stockage │
│ (InnoDB, MyISAM, Memory...) │
├─────────────────────────────────────┤
│ Couche système de fichiers │
└─────────────────────────────────────┘
3.2 Composants principaux
Thread de connexion
- Chaque client obtient un thread dédié
- Gestion de l’authentification
- Exécution des requêtes
Cache de requêtes
-- Vérification du cache
SHOW VARIABLES LIKE 'query_cache%';
-- Configuration
SET GLOBAL query_cache_size = 1048576;
Parseur SQL
- Analyse syntaxique
- Création de l’arbre syntaxique
- Vérification des privilèges
Optimiseur de requêtes
-- Analyse du plan d'exécution
EXPLAIN SELECT * FROM users WHERE id = 1;
4. Serveur MySQL
4.1 Installation du serveur
Linux (Ubuntu/Debian)
# Installation
sudo apt-get update
sudo apt-get install mysql-server
# Démarrage du service
sudo systemctl start mysql
sudo systemctl enable mysql
Windows
# Via MySQL Installer
# Configuration avec l'assistant graphique
4.2 Processus serveur (mysqld)
Démarrage et arrêt
# Démarrage
mysqld --defaults-file=/etc/mysql/my.cnf
# Arrêt propre
mysqladmin -u root -p shutdown
# Via systemctl
sudo systemctl start mysql
sudo systemctl stop mysql
sudo systemctl restart mysql
4.3 Sécurisation initiale
# Script de sécurisation
mysql_secure_installation
# Actions réalisées :
# - Définir le mot de passe root
# - Supprimer les utilisateurs anonymes
# - Désactiver la connexion root à distance
# - Supprimer la base de test
5. Configuration du serveur MySQL
5.1 Configuration de MySQL
Fichier de configuration principal
# /etc/mysql/my.cnf ou C:\ProgramData\MySQL\my.ini
[mysqld]
# Configuration serveur
port = 3306
bind-address = 127.0.0.1
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
# Performance
key_buffer_size = 16M
max_allowed_packet = 64M
thread_stack = 256K
thread_cache_size = 8
# InnoDB
innodb_buffer_pool_size = 128M
innodb_log_file_size = 48M
Ordre de lecture des fichiers
# Vérifier les fichiers lus
mysql --help | grep my.cnf
5.2 Variables de serveur dynamiques
Consultation des variables
-- Toutes les variables
SHOW VARIABLES;
-- Variables spécifiques
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb%';
-- Variables globales vs session
SELECT @@global.max_connections;
SELECT @@session.sort_buffer_size;
Modification dynamique
-- Modification globale (pour nouvelles connexions)
SET GLOBAL max_connections = 200;
-- Modification session (connexion courante)
SET SESSION sort_buffer_size = 256000;
-- Persistance (MySQL 8.0+)
SET PERSIST max_connections = 200;
5.3 Modes SQL du serveur
-- Consulter le mode SQL actuel
SELECT @@sql_mode;
-- Modes courants
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
-- Modes importants :
-- STRICT_TRANS_TABLES : Mode strict pour les transactions
-- NO_ZERO_DATE : Interdit '0000-00-00'
-- ONLY_FULL_GROUP_BY : GROUP BY strict
-- NO_AUTO_CREATE_USER : Sécurité utilisateurs
5.4 Fichiers journaux et d’état
Types de journaux
[mysqld]
# Journal d'erreurs
log_error = /var/log/mysql/error.log
# Journal général (toutes requêtes)
general_log = 1
general_log_file = /var/log/mysql/general.log
# Journal des requêtes lentes
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
Consultation des journaux
-- Activation/désactivation dynamique
SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';
-- Vérification
SHOW VARIABLES LIKE '%log%';
5.5 Journalisation binaire
Configuration
[mysqld]
# Activation du binary log
log_bin = mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M
Gestion des binary logs
-- Afficher les binary logs
SHOW BINARY LOGS;
-- Afficher les événements
SHOW BINLOG EVENTS IN 'mysql-bin.000001';
-- Purger les anciens logs
PURGE BINARY LOGS TO 'mysql-bin.000010';
PURGE BINARY LOGS BEFORE '2024-01-01 00:00:00';
Utilisation pour la réplication
-- Configuration maître
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
-- Position actuelle
SHOW MASTER STATUS;
6. Clients MySQL
6.1 Présentation des clients d’administration
Client ligne de commande (mysql)
- Interface texte interactive
- Exécution de scripts SQL
- Compatible avec tous les systèmes
MySQL Workbench
- Interface graphique complète
- Modélisation ER
- Administration visuelle
- Optimisation de requêtes
phpMyAdmin
- Interface web
- Gestion simplifiée
- Idéal pour hébergement mutualisé
6.2 Appel de programmes client MySQL
# Connexion basique
mysql -u username -p
# Connexion avec options
mysql -h hostname -P 3306 -u root -p database_name
# Exécution directe
mysql -u root -p -e "SHOW DATABASES;"
# Exécution de script
mysql -u root -p < script.sql
# Redirection sortie
mysql -u root -p -e "SELECT * FROM users;" > output.txt
6.3 Utilisation du client MySQL
Commandes principales
-- Commandes système (précédées de \)
\h ou help -- Aide
\c -- Annuler la commande en cours
\q ou quit -- Quitter
\s ou status -- Statut du serveur
\! command -- Exécuter commande shell
\. file.sql -- Exécuter script
-- Navigation
USE database_name;
SHOW DATABASES;
SHOW TABLES;
DESCRIBE table_name;
Options d’affichage
-- Format vertical
SELECT * FROM users\G
-- Pagination
pager less;
SELECT * FROM large_table;
nopager;
-- Export résultats
tee /tmp/output.txt;
SELECT * FROM users;
notee;
6.4 Client MySQLAdmin
# Vérifier le statut
mysqladmin -u root -p status
# Version
mysqladmin -u root -p version
# Processus actifs
mysqladmin -u root -p processlist
# Créer/supprimer base
mysqladmin -u root -p create newdb
mysqladmin -u root -p drop olddb
# Changer mot de passe
mysqladmin -u root -p password newpass
# Rafraîchir les privilèges
mysqladmin -u root -p flush-privileges
# Variables et statut
mysqladmin -u root -p variables
mysqladmin -u root -p extended-status
6.5 Connecteurs MySQL
Connecteur PHP
<?php
// MySQLi
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec connexion: " . $mysqli->connect_error);
}
// PDO
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Erreur: " . $e->getMessage();
}
?>
Connecteur Python
# mysql-connector-python
import mysql.connector
cnx = mysql.connector.connect(
user='user',
password='password',
host='127.0.0.1',
database='test'
)
cursor = cnx.cursor()
cursor.execute("SELECT * FROM users")
Connecteur Java (JDBC)
import java.sql.*;
String url = "jdbc:mysql://localhost:3306/test";
Connection conn = DriverManager.getConnection(url, "user", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
7. Présentation des types de données
7.1 Types numériques
Entiers
CREATE TABLE exemple_numerique (
tiny_col TINYINT, -- -128 à 127 (1 octet)
small_col SMALLINT, -- -32768 à 32767 (2 octets)
medium_col MEDIUMINT, -- -8388608 à 8388607 (3 octets)
int_col INT, -- -2147483648 à 2147483647 (4 octets)
big_col BIGINT, -- -9223372036854775808 à ... (8 octets)
unsigned_col INT UNSIGNED -- 0 à 4294967295
);
Décimaux
CREATE TABLE exemple_decimal (
prix DECIMAL(10,2), -- 10 chiffres dont 2 décimales
float_col FLOAT(7,4), -- Précision simple
double_col DOUBLE, -- Précision double
bit_col BIT(8) -- Valeur binaire
);
7.2 Types chaînes
CREATE TABLE exemple_chaine (
-- Chaînes longueur fixe
code_pays CHAR(2), -- Exactement 2 caractères
-- Chaînes longueur variable
nom VARCHAR(100), -- Max 100 caractères
-- Types BINARY
hash BINARY(16), -- Binaire fixe
data VARBINARY(255), -- Binaire variable
-- Types TEXT
description TEXT, -- Max 65535 caractères
article MEDIUMTEXT, -- Max 16777215 caractères
contenu LONGTEXT, -- Max 4294967295 caractères
-- Types BLOB
image BLOB, -- Binary Large Object
fichier MEDIUMBLOB,
video LONGBLOB
);
7.3 Types date et heure
CREATE TABLE exemple_temps (
date_naissance DATE, -- 'YYYY-MM-DD'
heure_rdv TIME, -- 'HH:MM:SS'
creation DATETIME, -- 'YYYY-MM-DD HH:MM:SS'
modification TIMESTAMP -- Avec fuseau horaire
DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
annee YEAR -- Année sur 4 chiffres
);
-- Exemples d'insertion
INSERT INTO exemple_temps VALUES (
'1990-05-15',
'14:30:00',
'2024-01-15 10:30:45',
NOW(),
2024
);
7.4 Types JSON (MySQL 5.7+)
CREATE TABLE exemple_json (
id INT PRIMARY KEY,
donnees JSON
);
-- Insertion
INSERT INTO exemple_json VALUES (
1,
'{"nom": "Martin", "age": 30, "ville": "Paris"}'
);
-- Requêtes JSON
SELECT JSON_EXTRACT(donnees, '$.nom') FROM exemple_json;
SELECT donnees->>'$.ville' FROM exemple_json;
7.5 Types spéciaux
CREATE TABLE exemple_special (
-- Énumération
statut ENUM('actif', 'inactif', 'suspendu'),
-- Ensemble
permissions SET('lecture', 'ecriture', 'suppression'),
-- Géométrie
position POINT,
zone POLYGON,
-- Auto-increment
id INT AUTO_INCREMENT PRIMARY KEY
);
8. Métadonnées
8.1 Base INFORMATION_SCHEMA
-- Structure de la base de métadonnées
USE INFORMATION_SCHEMA;
SHOW TABLES;
-- Tables principales :
-- SCHEMATA : Bases de données
-- TABLES : Tables
-- COLUMNS : Colonnes
-- STATISTICS : Index
-- KEY_COLUMN_USAGE : Contraintes
-- ROUTINES : Procédures et fonctions
-- TRIGGERS : Déclencheurs
-- VIEWS : Vues
8.2 Requêtes sur les métadonnées
Informations sur les bases
-- Lister toutes les bases
SELECT SCHEMA_NAME
FROM INFORMATION_SCHEMA.SCHEMATA;
-- Taille des bases
SELECT
table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM INFORMATION_SCHEMA.TABLES
GROUP BY table_schema;
Informations sur les tables
-- Tables d'une base
SELECT TABLE_NAME, TABLE_TYPE, ENGINE, TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mydatabase';
-- Colonnes d'une table
SELECT
COLUMN_NAME,
DATA_TYPE,
IS_NULLABLE,
COLUMN_DEFAULT,
COLUMN_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME = 'mytable';
Informations sur les index
-- Index d'une table
SELECT
INDEX_NAME,
COLUMN_NAME,
NON_UNIQUE,
SEQ_IN_INDEX
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME = 'mytable';
8.3 Base mysql système
-- Tables système importantes
USE mysql;
-- Utilisateurs et privilèges
SELECT * FROM user;
SELECT * FROM db;
SELECT * FROM tables_priv;
SELECT * FROM columns_priv;
-- Événements et routines
SELECT * FROM event;
SELECT * FROM proc;
8.4 Performance Schema
-- Activation
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES';
-- Requêtes les plus lentes
SELECT
DIGEST_TEXT,
COUNT_STAR,
AVG_TIMER_WAIT/1000000000 AS avg_ms
FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC
LIMIT 10;
9. Moteurs de stockage
9.1 InnoDB (Par défaut)
Caractéristiques
- Support des transactions ACID
- Verrouillage au niveau ligne
- Clés étrangères
- Récupération automatique après crash
CREATE TABLE commandes (
id INT PRIMARY KEY,
client_id INT,
montant DECIMAL(10,2),
FOREIGN KEY (client_id) REFERENCES clients(id)
) ENGINE=InnoDB;
-- Configuration InnoDB
SHOW VARIABLES LIKE 'innodb%';
-- Paramètres importants
SET GLOBAL innodb_buffer_pool_size = 2147483648; -- 2GB
SET GLOBAL innodb_flush_log_at_trx_commit = 1; -- Durabilité maximale
9.2 MyISAM
Caractéristiques
- Très rapide en lecture
- Pas de transactions
- Verrouillage au niveau table
- Réparation possible avec myisamchk
CREATE TABLE logs (
id INT PRIMARY KEY,
message TEXT,
created_at TIMESTAMP
) ENGINE=MyISAM;
-- Optimisation et réparation
OPTIMIZE TABLE logs;
REPAIR TABLE logs;
9.3 Memory (HEAP)
-- Table en mémoire RAM
CREATE TABLE cache_session (
session_id VARCHAR(32) PRIMARY KEY,
user_data TEXT,
expires_at DATETIME
) ENGINE=Memory;
-- Limitations :
-- Perte des données au redémarrage
-- Pas de colonnes TEXT/BLOB
-- Taille fixe des lignes
9.4 CSV
-- Stockage en fichier CSV
CREATE TABLE export_data (
id INT NOT NULL,
nom VARCHAR(100) NOT NULL,
valeur DECIMAL(10,2) NOT NULL
) ENGINE=CSV;
-- Fichier créé : export_data.CSV dans le datadir
9.5 Archive
-- Compression automatique, lecture seule après insertion
CREATE TABLE historique (
id INT,
donnees TEXT,
date_archivage DATETIME
) ENGINE=Archive;
-- Idéal pour : logs, données historiques
-- Compression zlib
-- Pas d'index (sauf sur colonnes AUTO_INCREMENT)
9.6 Comparaison et choix
-- Vérifier les moteurs disponibles
SHOW ENGINES;
-- Changer le moteur d'une table
ALTER TABLE ma_table ENGINE=InnoDB;
-- Moteur par défaut
SELECT @@default_storage_engine;
SET default_storage_engine=InnoDB;
Guide de choix :
- InnoDB : Applications transactionnelles, intégrité référentielle
- MyISAM : Lectures intensives, pas de transactions
- Memory : Cache temporaire, sessions
- CSV : Import/export de données
- Archive : Archivage, compression
10. Partitionnement
10.1 Présentation et avantages du partitionnement
Concept Le partitionnement divise une table en plusieurs parties physiques tout en conservant une interface logique unique.
Avantages
- Amélioration des performances sur grandes tables
- Maintenance facilitée (purge par partition)
- Requêtes parallèles possibles
- Archivage simplifié
- Distribution de charge I/O
Types de partitionnement
- RANGE : Par plage de valeurs
- LIST : Par liste de valeurs
- HASH : Répartition par fonction de hachage
- KEY : Similaire à HASH avec clé MySQL
- Sous-partitionnement possible
10.2 Création d’une table partitionnée
Partitionnement RANGE
-- Par date
CREATE TABLE ventes (
id INT,
date_vente DATE,
montant DECIMAL(10,2),
produit_id INT
)
PARTITION BY RANGE (YEAR(date_vente)) (
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- Par valeur numérique
CREATE TABLE commandes (
id INT,
montant DECIMAL(10,2),
client_id INT
)
PARTITION BY RANGE (montant) (
PARTITION p_small VALUES LESS THAN (100),
PARTITION p_medium VALUES LESS THAN (1000),
PARTITION p_large VALUES LESS THAN (10000),
PARTITION p_xlarge VALUES LESS THAN MAXVALUE
);
Partitionnement LIST
CREATE TABLE employes (
id INT,
nom VARCHAR(100),
departement VARCHAR(50)
)
PARTITION BY LIST COLUMNS(departement) (
PARTITION p_ventes VALUES IN ('Ventes', 'Marketing'),
PARTITION p_tech VALUES IN ('IT', 'R&D'),
PARTITION p_admin VALUES IN ('RH', 'Comptabilité'),
PARTITION p_autres VALUES IN ('Support', 'Logistique')
);
Partitionnement HASH
-- Répartition automatique
CREATE TABLE utilisateurs (
id INT PRIMARY KEY,
email VARCHAR(100),
date_inscription DATE
)
PARTITION BY HASH(id)
PARTITIONS 8; -- 8 partitions équilibrées
-- Avec expression
CREATE TABLE logs (
id INT,
message TEXT,
created_at DATETIME
)
PARTITION BY HASH(MONTH(created_at))
PARTITIONS 12; -- Une partition par mois
Partitionnement KEY
CREATE TABLE sessions (
session_id VARCHAR(32) PRIMARY KEY,
user_id INT,
data TEXT
)
PARTITION BY KEY() -- Utilise la PRIMARY KEY
PARTITIONS 4;
Sous-partitionnement
CREATE TABLE transactions (
id INT,
date_transaction DATE,
type VARCHAR(20),
montant DECIMAL(10,2)
)
PARTITION BY RANGE(YEAR(date_transaction))
SUBPARTITION BY HASH(TO_DAYS(date_transaction)) (
PARTITION p2023 VALUES LESS THAN (2024) (
SUBPARTITION p2023_q1,
SUBPARTITION p2023_q2,
SUBPARTITION p2023_q3,
SUBPARTITION p2023_q4
),
PARTITION p2024 VALUES LESS THAN (2025) (
SUBPARTITION p2024_q1,
SUBPARTITION p2024_q2,
SUBPARTITION p2024_q3,
SUBPARTITION p2024_q4
)
);
10.3 Obtention des informations de partition
-- Informations générales
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME = 'ventes';
-- Détails des partitions
SELECT
PARTITION_NAME,
PARTITION_EXPRESSION,
PARTITION_DESCRIPTION,
TABLE_ROWS,
DATA_LENGTH,
INDEX_LENGTH
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'ventes';
-- Vérifier quelle partition est utilisée
EXPLAIN PARTITIONS
SELECT * FROM ventes
WHERE date_vente BETWEEN '2023-01-01' AND '2023-12-31';
-- Statistiques par partition
SELECT
partition_name,
table_rows,
data_length/1024/1024 AS data_size_mb
FROM information_schema.partitions
WHERE table_name = 'ventes'
ORDER BY partition_ordinal_position;
10.4 Modification et suppression de partitions
Ajout de partitions
-- Ajouter une nouvelle partition RANGE
ALTER TABLE ventes
ADD PARTITION (
PARTITION p2024 VALUES LESS THAN (2025)
);
-- Ajouter des partitions HASH
ALTER TABLE utilisateurs
ADD PARTITION PARTITIONS 2; -- Passe de 8 à 10 partitions
Réorganisation
-- Réorganiser une partition RANGE
ALTER TABLE ventes
REORGANIZE PARTITION p_future INTO (
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION p2025 VALUES LESS THAN (2026),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- Fusionner des partitions
ALTER TABLE ventes
REORGANIZE PARTITION p2020, p2021 INTO (
PARTITION p_ancien VALUES LESS THAN (2022)
);
Suppression et troncature
-- Supprimer une partition (et ses données)
ALTER TABLE ventes DROP PARTITION p2020;
-- Vider une partition (garder la structure)
ALTER TABLE ventes TRUNCATE PARTITION p2021;
-- Supprimer plusieurs partitions
ALTER TABLE ventes DROP PARTITION p2020, p2021;
Maintenance des partitions
-- Analyser une partition
ALTER TABLE ventes ANALYZE PARTITION p2023;
-- Optimiser une partition
ALTER TABLE ventes OPTIMIZE PARTITION p2023;
-- Réparer une partition
ALTER TABLE ventes REPAIR PARTITION p2023;
-- Vérifier une partition
ALTER TABLE ventes CHECK PARTITION p2023;
Échange de partitions
-- Créer une table temporaire avec même structure
CREATE TABLE ventes_archive LIKE ventes;
ALTER TABLE ventes_archive REMOVE PARTITIONING;
-- Échanger une partition avec une table
ALTER TABLE ventes
EXCHANGE PARTITION p2020 WITH TABLE ventes_archive;
Suppression du partitionnement
-- Convertir en table normale
ALTER TABLE ventes REMOVE PARTITIONING;
Travaux Pratiques
TP 1 : Installation et configuration (4h)
- Installer MySQL Server
- Configurer le fichier my.cnf
- Sécuriser l’installation
- Créer les premiers utilisateurs
- Configurer les logs
TP 2 : Administration avec les clients (4h)
- Utilisation du client mysql
- Scripts d’administration avec mysqladmin
- Interface graphique avec Workbench
- Automatisation avec scripts bash/batch
TP 3 : Gestion des données (4h)
- Créer des tables avec différents types
- Import/export de données
- Manipulation des métadonnées
- Requêtes sur INFORMATION_SCHEMA
TP 4 : Moteurs de stockage (4h)
- Créer des tables avec différents moteurs
- Comparer les performances
- Migration entre moteurs
- Configuration InnoDB
TP 5 : Partitionnement (4h)
- Créer des tables partitionnées
- Maintenance des partitions
- Tests de performance
- Stratégies d’archivage
Projet final (10h)
Concevoir et implémenter une base de données complète pour une application e-commerce avec :
- Architecture optimisée
- Partitionnement des tables volumineuses
- Procédures de maintenance
- Documentation complète
Évaluation
Contrôle continu (40%)
- TP notés
- QCM réguliers
- Participation
Examen final (60%)
- Questions théoriques (30%)
- Cas pratiques (40%)
- Analyse et optimisation (30%)
Ressources complémentaires
Documentation officielle
Livres recommandés
- “High Performance MySQL” - O’Reilly
- “MySQL Cookbook” - O’Reilly
- “Learning MySQL and MariaDB” - O’Reilly
Outils utiles
- MySQL Workbench
- phpMyAdmin
- Percona Toolkit
- MySQL Tuner
Ce cours fournit une base solide pour l’administration des bases de données MySQL, couvrant tous les aspects essentiels de l’installation à l’optimisation avancée.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Cours Détaillé : Administration des Bases de Données MySQL. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.