- 1 1. Introduction
- 2 2. Quick refresher: basic mysqldump usage
- 3 3. Dumps conditionnels avec l’option --where
- 3.1 Que peut faire --where ?
- 3.2 Syntaxe de base
- 3.3 Exemples de conditions courantes
- 3.4 Remarques lors de l’utilisation de conditions WHERE
- 3.5 Cas d’utilisation pratiques
- 3.5.1 Cas 1 : Extraire uniquement les journaux d’une certaine période
- 3.5.2 Cas 2 : Migrer uniquement les utilisateurs actifs (vers un nouvel environnement)
- 3.5.3 Cas 3 : Extraire uniquement les données d’un utilisateur spécifique pour enquête
- 3.5.4 Cas 4 : Diviser les dumps par plage d’ID (pour les grands ensembles de données)
- 3.6 Bonnes pratiques (paramètres recommandés)
- 4 4. Points clés lors de la restauration
- 5 5. Dépannage / questions courantes
- 5.1 Erreurs courantes et solutions
- 5.1.1 1. Privilèges insuffisants (Accès refusé)
- 5.1.2 2. Le filtre WHERE ne s’applique pas et tout est dumpé
- 5.1.3 3. La taille du dump est anormalement grande / le traitement est lent
- 5.1.4 4. Texte illisible (problèmes d’encodage de caractères)
- 5.1.5 5. Impossible d’importer à cause d’une entrée dupliquée (duplication de clé primaire)
- 5.2 Mises en garde sur les performances et l’exploitation
- 5.3 Frequently asked questions (FAQ)
- 5.3.1 Q1. Les conditions WHERE peuvent‑elles être utilisées sur plusieurs tables ?
- 5.3.2 Q2. Peut‑on utiliser LIKE dans les conditions WHERE ?
- 5.3.3 Q3. Puis‑je exporter le schéma mais filtrer les données avec WHERE ?
- 5.3.4 Q4. J’obtiens une erreur de clé étrangère lors de la restauration d’un dump conditionnel
- 5.3.5 Q5. Quelle est la meilleure approche lorsque les gros volumes de données prennent trop de temps ?
- 5.1 Erreurs courantes et solutions
- 6 6. Résumé
1. Introduction
Le besoin d’extraire « les seules données requises » lors des opérations de sauvegarde
Lors de l’utilisation de MySQL, les sauvegardes régulières sont essentielles. Cependant, selon les situations, il existe de nombreux cas où « vous n’avez pas besoin de dumper toutes les données ». Par exemple :
- Extraire uniquement les données d’une période spécifique d’une grande table
- Dumper uniquement les enregistrements dont le statut a une valeur précise
- Exclure les anciennes données et migrer uniquement les enregistrements actuellement utilisés
- Déplacer uniquement les données requises vers un environnement de test
Dans ces scénarios, l’option --where de mysqldump est extrêmement utile.
Comment mysqldump se rapporte aux conditions WHERE
Normalement, mysqldump est utilisé comme mécanisme pour « sauvegarder toutes les lignes d’une table ». Cependant, avec --where, vous pouvez spécifier des conditions comme dans une clause SQL WHERE et créer un fichier de dump qui ne contient que les enregistrements requis.
- Conditions de date telles que
created_at >= '2024-01-01' - Conditions de statut telles que
status = 'active' - Filtres de plage tels que
id BETWEEN 100 AND 200 - Extraction avec plusieurs conditions combinées à l’aide de AND / OR
De cette façon, mysqldump n’est pas seulement un outil de sauvegarde — il peut également être utilisé comme un outil d’extraction de données flexible.
Avantages des dumps conditionnels
En exploitant --where, vous pouvez obtenir les bénéfices suivants :
- Temps de sauvegarde réduit : comme seules les enregistrements requis sont extraits, la charge de travail est plus légère.
- Taille de fichier de dump plus petite : particulièrement efficace dans les environnements avec de grandes tables.
- Migration de données plus efficace : vous ne chargez que les données dont vous avez besoin dans les environnements de test ou de préproduction.
- Idéal pour l’archivage : permet des conceptions flexibles telles que « sauvegarder les anciennes données séparément comme archive ».
Ce que vous apprendrez dans cet article
Cet article fournit une explication complète — des bases de mysqldump à la rédaction de dumps filtrés par WHERE, des exemples pratiques, des précautions opérationnelles et le dépannage.
- Syntaxe de base de mysqldump
- Exemples pratiques de dumps filtrés par WHERE
- Modèles de conditions spécifiques utilisant les dates et les valeurs de statut
- Réflexion sur les performances sur de grandes tables
- Erreurs courantes et comment les corriger
- Bonnes pratiques appliquées aux opérations réelles
Pour rester accessible aux débutants, nous expliquons soigneusement les commandes d’exemple et les moments où les utiliser.
2. Quick refresher: basic mysqldump usage
mysqldump est l’outil officiel de sauvegarde de MySQL. Sa caractéristique principale est qu’il peut enregistrer les données et la structure des tables sous forme d’un fichier SQL texte. Avant d’utiliser les conditions WHERE, passons en revue les bases à connaître.
Basic syntax and core options
La syntaxe de base de mysqldump est très simple :
mysqldump -u username -p database_name > dump.sql
Lorsque vous exécutez la commande, il vous sera demandé de saisir un mot de passe.
Dans cette forme, toutes les tables de la base de données sont dumpées.
Options principales couramment utilisées
mysqldump possède de nombreuses options, mais les suivantes sont particulièrement courantes :
--single-transaction: sauvegarde les tables InnoDB sans les verrouiller. Sécurisé même sur un système en production.--quick: traite les lignes une par une tout en maintenant une faible utilisation de la mémoire. Efficace pour les grandes tables.--default-character-set=utf8mb4: évite les caractères corrompus en spécifiant le jeu de caractères du fichier de dump.--no-data: ne dump que la structure des tables (pas de données).--tables: spécifie les noms de tables pour ne dumper que ce dont vous avez besoin.
En combinant ces options, vous pouvez créer une sauvegarde optimale pour votre situation.
How to dump only specific tables
Avec mysqldump, vous pouvez lister les noms de tables après le nom de la base de données pour ne sauvegarder que ces tables.
mysqldump -u root -p mydb users orders > selected_tables.sql
Dans cet exemple, seules les tables users et orders sont dumpées.
C’est très pratique lorsque vous avez besoin de plusieurs tables mais pas de toute la base de données.
How to dump multiple databases together
Si vous souhaitez sauvegarder plusieurs bases de données en même temps, utilisez --databases ou --all-databases.
- Exporter plusieurs bases de données spécifiées
mysqldump -u root -p --databases db1 db2 db3 > multi_db.sql - Exporter toutes les bases de données du serveur
mysqldump -u root -p --all-databases > all.sql
Comme les dumps filtrés par WHERE sont essentiellement utilisés par table, il est important de comprendre d’abord le concept de « dumps au niveau de la table ».
Flux de sauvegarde‑à‑restauration de base avec mysqldump
Le flux de sauvegarde de base utilisant mysqldump est le suivant :
- Générer un fichier de dump avec mysqldump
- Optionnellement le compresser avec gzip, etc.
- Le stocker dans un endroit sûr (un autre serveur, stockage externe, etc.)
- Restaurer en important avec la commande mysql
La restauration se fait ainsi :
mysql -u root -p mydb < dump.sql
Comme mysqldump produit du SQL en texte brut, il est facile à manipuler et n’est pas lié à un environnement spécifique.
3. Dumps conditionnels avec l’option --where
L’une des options les plus puissantes de mysqldump est --where.
Vous pouvez spécifier des conditions de la même manière que dans une clause SELECT WHERE de MySQL, et ne dumper que les lignes dont vous avez besoin.
Que peut faire --where ?
Un mysqldump normal sauvegarde une table entière.
Mais avec --where, vous pouvez effectuer des « sauvegardes de type extraction » telles que :
- Extraire seulement les nouvelles données
- Dumper seulement les lignes où le statut est actif
- Sauvegarder seulement les données d’un utilisateur spécifique
- Extraire seulement les lignes dans une certaine plage d’ID
- Combiner plusieurs conditions (AND/OR)
C’est pourquoi mysqldump peut être utilisé non seulement comme outil de sauvegarde, mais aussi comme
« outil de migration de données avec filtres d’extraction ».
Syntaxe de base
La forme de base de --where est :
mysqldump -u root -p mydb mytable --where="condition_expression" > filtered.sql
L’expression de condition peut être écrite comme une clause SQL WHERE standard.
Exemples de conditions courantes
1. Filtrer par ID
mysqldump -u root -p mydb users --where="id > 1000" > users_over_1000.sql
2. Filtrer par date (created_at est 2024 ou plus tard)
mysqldump -u root -p mydb logs --where="created_at >= '2024-01-01'" > logs_2024.sql
3. Filtrer par statut (actif uniquement)
mysqldump -u root -p mydb orders --where="status = 'active'" > orders_active.sql
4. Conditions multiples (AND)
mysqldump -u root -p mydb orders \
--where="status = 'active' AND created_at >= '2024-01-01'" \
> orders_active_recent.sql
5. Combiner des conditions OR
mysqldump -u root -p mydb products \
--where="category = 'A' OR category = 'B'" \
> products_ab.sql
6. Correspondances partielles avec LIKE
mysqldump -u root -p mydb members --where="email LIKE '%@example.com'" > example_members.sql
Remarques lors de l’utilisation de conditions WHERE
1. Utilisation de guillemets doubles vs. guillemets simples
--where="status = 'active'"
Comme indiqué ci‑dessus,
Extérieur → guillemets doubles
Intérieur → guillemets simples
est l’approche standard.
2. Cela ne peut être utilisé que par table
--where ne peut pas être utilisé pour une base de données entière.
Vous devez le spécifier pour chaque table.
3. Faites attention aux formats de date et de chaîne
Si le format ne correspond pas à la définition de la colonne dans MySQL, les lignes ne seront pas extraites.
4. Les conditions lourdes peuvent ralentir le traitement
Surtout si la condition WHERE ne peut pas utiliser d’index, le dump sera plus lent.
Cas d’utilisation pratiques
Cas 1 : Extraire uniquement les journaux d’une certaine période
Cet exemple extrait uniquement les journaux récents nécessaires aux opérations à partir d’une grande table de logs.
mysqldump -u root -p app logs \
--where="created_at >= NOW() - INTERVAL 30 DAY" \
> logs_last_30days.sql
Cas 2 : Migrer uniquement les utilisateurs actifs (vers un nouvel environnement)
mysqldump -u root -p service users \
--where="status = 'active'" \
> active_users.sql
Cas 3 : Extraire uniquement les données d’un utilisateur spécifique pour enquête
mysqldump -u root -p crm payments \
--where="user_id = 42" \
> payments_user_42.sql
Cas 4 : Diviser les dumps par plage d’ID (pour les grands ensembles de données)
mysqldump -u root -p mydb orders --where="id BETWEEN 1 AND 500000" > part1.sql
mysqldump -u root -p mydb orders --where="id BETWEEN 500001 AND 1000000" > part2.sql
Il s’agit d’une approche pratique couramment utilisée pour les très grandes tables.
Bonnes pratiques (paramètres recommandés)
- Combinez avec
--single-transactionPour InnoDB, vous pouvez éviter les verrous tout en conservant une sauvegarde cohérente. - Utilisez
--quickpour réduire l’utilisation de la mémoire - Vérifiez que les colonnes du dump ont des index Si WHERE est lent, c’est souvent parce qu’il n’y a pas d’index.
- Compressez avec gzip pour réduire la taille du fichier Exemple :
mysqldump ... | gzip > backup.sql.gz - Soyez prudent lors de l’exécution pendant les heures de travail Parce que cela peut entraîner une charge, il est recommandé de le faire la nuit ou pendant les fenêtres de maintenance.
4. Points clés lors de la restauration
Même si le fichier de dump a été extrait avec une condition WHERE, la procédure de restauration de base est la même qu’une restauration mysqldump normale. Cependant, comme il ne contient que « des enregistrements sélectionnés », il y a quelques points auxquels vous devez faire attention.
Procédure de restauration à partir d’un dump conditionnel
La méthode de restauration la plus standard est :
mysql -u root -p database_name < dump.sql
Lorsque vous exécutez cette commande, les instructions CREATE TABLE et INSERT incluses dans la sortie de mysqldump sont appliquées à la base de données telles quelles.
Cependant, pour les dumps filtrés par WHERE, vous devez prêter attention aux points suivants.
Notes lors de la restauration d’un dump filtré par WHERE
1. Cela peut entrer en conflit avec les données existantes dans la table d’origine
Un dump conditionnel extrait « seuls certains enregistrements ».
Par exemple :
- La table de destination possède déjà la même clé primaire (id)
- Un INSERT partiel entraîne des doublons
Dans de tels cas, vous pouvez voir des erreurs comme celle-ci lors de l’import :
ERROR 1062 (23000): Duplicate entry '1001' for key 'PRIMARY'
→ Contremesures
- TRUNCATE la table cible au préalable si nécessaire
- Modifiez le SQL afin de pouvoir utiliser
INSERT IGNOREouON DUPLICATE KEY UPDATE - Vérifiez que la destination est une « table vide » dès le départ
Comme mysqldump génère des instructions INSERT par défaut, vous devez faire attention aux doublons.
2. Faites attention aux contraintes de clé étrangère
Un dump conditionnel n’extrait pas automatiquement toutes les tables liées ensemble.
Exemple :
- Extraire uniquement la table users avec WHERE
- Mais la table orders qui référence user_id n’est pas présente
Dans ce cas, une erreur de clé étrangère peut survenir lors de la restauration.
→ Contremesures
- Désactivez temporairement les vérifications de clés étrangères avec
SET FOREIGN_KEY_CHECKS=0; - Si nécessaire, dump les tables liées avec les mêmes conditions
- Comprenez à l’avance si l’intégrité référentielle est requise pour votre cas d’utilisation

3. Surveillez les différences de schéma (migration dev vs. prod)
Si les structures de tables diffèrent entre le développement et la production, des erreurs peuvent survenir lors de la restauration.
Exemples :
- La colonne A existe localement mais a été supprimée en production
- La production a NOT NULL, mais les données du dump contiennent NULL
- L’ordre des colonnes ou les types de données diffèrent
→ Contremesures
- Vérifiez au préalable avec
SHOW CREATE TABLE table_name; - Si nécessaire, utilisez
--no-create-info(exclure le schéma) et chargez uniquement les données - Unifiez les schémas avant le dump et la restauration
Utilisation pour les sauvegardes différentielles et les migrations
Les dumps filtrés par WHERE sont très efficaces lorsque vous souhaitez « déplacer uniquement les données dont vous avez besoin vers un autre environnement ».
1. Migrer uniquement la plage requise vers un environnement de test
- Seulement les 30 derniers jours de logs
- Seulement les utilisateurs actifs
- Seulement la période de ventes que vous souhaitez valider
Ces extractions contribuent également de manière significative à réduire la taille des bases de données de test.
2. Archiver les anciennes données
Si la base de données de production augmente, vous pouvez extraire uniquement les anciennes données et les stocker séparément comme ceci :
mysqldump -u root -p mydb logs \
--where="created_at < '2023-01-01'" \
> logs_archive_2022.sql
3. Notes sur la fusion
Si vous combinez plusieurs dumps conditionnels et les chargez dans une seule table, vous devez porter une attention particulière aux clés primaires et à la cohérence.
Résumé : les dumps filtrés par WHERE sont puissants, mais à restaurer avec précaution
L’option WHERE de mysqldump est très pratique, mais pour les restaurations, vous devez garder ces points à l’esprit :
- Enregistrements en double avec la table de destination/origine
- Contraintes de clés étrangères
- Incohérences de schéma
- Problèmes potentiels de cohérence dus au filtrage
Cela dit, si vous maîtrisez les dumps conditionnels, vos sauvegardes quotidiennes, archivages et migrations de données deviennent nettement plus efficaces.
5. Dépannage / questions courantes
mysqldump semble être un outil simple, mais lorsqu’il est combiné avec des conditions WHERE, des erreurs inattendues peuvent survenir selon votre environnement d’exécution, vos structures de données et les paramètres d’autorisation. Cette section explique systématiquement les problèmes courants rencontrés en pratique et comment les résoudre.
Erreurs courantes et solutions
1. Privilèges insuffisants (Accès refusé)
mysqldump: Got error: 1044: Access denied for user ...
Principales causes
- Privilèges SELECT manquants
- Des privilèges supplémentaires peuvent être requis lorsque des déclencheurs ou des vues sont inclus
- Échec lors de la tentative de dump de la base de données système
mysql
Comment corriger
- Au minimum, accordez les privilèges SELECT sur les tables cibles
- S’il y a des vues →
SHOW VIEW - S’il y a des déclencheurs →
TRIGGER - Si possible, créez un utilisateur dédié aux sauvegardes
2. Le filtre WHERE ne s’applique pas et tout est dumpé
Causes
- Citations incorrectes
- Des caractères spéciaux sont interprétés par le shell
- L’expression ne correspond pas à la colonne (mauvais format chaîne/date)
Exemple (erreur courante)
--where=status='active'
Forme correcte
--where="status = 'active'"
Comment corriger
- Utilisez des guillemets doubles à l’extérieur et des guillemets simples à l’intérieur
- Faites de même lors de l’utilisation de LIKE, > ou < (entourer de guillemets)
- Vérifiez que le format de date correspond à celui stocké dans la base de données
3. La taille du dump est anormalement grande / le traitement est lent
Causes
- Pas d’index sur la colonne utilisée dans la condition WHERE
- Utilisation de correspondances non préfixées comme LIKE ‘%mot‑clé’
- Les conditions sont trop complexes
- Analyse d’une grande table sans index
Comment corriger
- Envisagez d’ajouter un index aux colonnes utilisées dans WHERE
- Pour les grandes tables, divisez les dumps en plusieurs exécutions par plage d’ID
- Utilisez toujours
--quickpour réduire la pression mémoire - Exécutez-le la nuit ou pendant les heures de faible trafic
4. Texte illisible (problèmes d’encodage de caractères)
Causes
- Les jeux de caractères par défaut diffèrent selon l’environnement
- Le jeu de caractères au moment du dump et de la restauration ne correspond pas
- Mélange de utf8 et utf8mb4
Comment corriger
Spécifiez toujours le jeu de caractères lors du dump :
--default-character-set=utf8mb4
※ Utiliser le même paramètre lors de la restauration aide à éviter le texte illisible.
5. Impossible d’importer à cause d’une entrée dupliquée (duplication de clé primaire)
Parce que les dumps conditionnels extraient « seuls les enregistrements requis », vous obtiendrez des erreurs de duplication lorsque :
- La table existante possède déjà le même ID
- Vous essayez de fusionner des dumps et des doublons apparaissent
Comment corriger
- TRONQUEZ la table de destination
- Modifiez le SQL si nécessaire et changez-le en
INSERT IGNORE - Pour la fusion, vérifiez les doublons avant le chargement
Mises en garde sur les performances et l’exploitation
Stratégies de base pour les grands ensembles de données
- Divisez les dumps par plage d’ID
- Divisez en plusieurs fichiers par plage de dates
- Compressez avec
gzipoupigzsi nécessaire - Exécutez pendant les heures de faible charge, comme tard dans la nuit
À propos des risques de verrouillage
MyISAM verrouille les tables pendant les dumps.
Pour InnoDB, l’option suivante est recommandée :
--single-transaction
This helps you extract consistent data while mostly avoiding locks.
Operational checklist
- Validate the WHERE condition with a SELECT query in advance
- Check disk space before dumping
- Always store dump files securely (encrypt and/or compress)
- Confirm the destination table schema matches
Frequently asked questions (FAQ)
Q1. Les conditions WHERE peuvent‑elles être utilisées sur plusieurs tables ?
Non.
mysqldump’s WHERE filtering works per table.
You cannot use JOIN.
Q2. Peut‑on utiliser LIKE dans les conditions WHERE ?
Yes, you can. However, non-prefix matches like %keyword cannot use indexes and will be slower.
Q3. Puis‑je exporter le schéma mais filtrer les données avec WHERE ?
If you only need the schema, you would use --no-data, so a WHERE condition is usually unnecessary.
Q4. J’obtiens une erreur de clé étrangère lors de la restauration d’un dump conditionnel
Run the following to temporarily disable constraints:
SET FOREIGN_KEY_CHECKS=0;
However, be careful not to break consistency.
Q5. Quelle est la meilleure approche lorsque les gros volumes de données prennent trop de temps ?
- Check whether the WHERE columns are indexed
- Split into multiple dumps using ID ranges
- Use
--quick - Move execution time to late night. These are the most effective approaches in real operations.
6. Résumé
mysqldump est l’un des outils de sauvegarde les plus simples à utiliser avec MySQL, et en le combinant avec l’option --where, vous pouvez aller au-delà des sauvegardes simples et l’utiliser comme un « outil d’extraction de données flexible ».
Dans les opérations réelles, vous avez souvent besoin d’extraire uniquement une période spécifique, un certain statut, ou de diviser de gros volumes de données en parties plus petites. Dans ces situations, --where est extrêmement puissant et contribue de façon significative à une gestion efficace des données.
Points clés abordés dans cet article
- Syntaxe de base de mysqldump Des sauvegardes simples sont possibles en spécifiant uniquement le nom d’utilisateur et le nom de la base de données.
- Dumps conditionnels avec
--whereExtrait uniquement les enregistrements requis, comme une clause WHERE en SQL. - Exemples de conditions pratiques Prend en charge de nombreux modèles de filtrage : plages de dates, statut, plages d’ID, LIKE et conditions combinées.
- Précautions lors de la restauration Lors du chargement de données partielles, faites attention aux doublons et aux contraintes de clés étrangères.
- Problèmes courants et contre‑mesures Couvre les privilèges insuffisants, le WHERE qui ne s’applique pas, les baisses de performance, les problèmes d’encodage et la duplication de clés primaires.
Avantages des dumps filtrés par WHERE
- Sauvegardes plus rapides Pas besoin de tout sauvegarder — le filtrage réduit le temps de traitement.
- Taille de fichiers réduite Particulièrement efficace pour les grandes tables.
- Migration de données plus facile vers les environnements de test/staging Chargez uniquement les données dont vous avez besoin.
- Utile pour l’archivage Facilite la gestion des anciennes données sous forme de fichiers séparés.
Ce que vous pouvez essayer ensuite
Une fois que vous avez compris les dumps filtrés par WHERE, vous pouvez également envisager les étapes suivantes :
- Automatiser les sauvegardes avec cron (Linux) en utilisant des scripts de sauvegarde
- Compression automatique combinée avec gzip ou zip
- Utiliser des outils de sauvegarde physique plus rapides que mysqldump (comme Percona XtraBackup)
- Conception de sauvegarde pour les environnements à grande échelle
mysqldump est simple, mais avec une compréhension et une utilisation correctes, il élargit considérablement vos options de conception de sauvegarde.

