« Mysqldump » : différence entre les versions
Page créée avec « Sauvegarder et restaurer une BDD. <syntaxhighlight lang="bash">mysqldump \ --single-transaction --quick --lock-tables=false \ --routines --triggers --events \ -u root -p \ bdd_dev | gzip > ~/bdd_dev.sql.gz</syntaxhighlight> ----- == 🔍 Vue d’ensemble == * '''<code>mysqldump … bdd_dev</code>''' : exporte la base '''<code>bdd_dev</code>''' en SQL (DDL + données). * '''<code>| gzip > ~/bdd_dev.sql.gz</code>''' : compresse le flux SQL '''à la v... » |
Aucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
Sauvegarder et restaurer une BDD. | Sauvegarder et restaurer une BDD. | ||
<syntaxhighlight lang="bash">mysqldump \ | <syntaxhighlight lang="bash" copy>mysqldump \ | ||
--single-transaction --quick --lock-tables=false \ | --single-transaction --quick --lock-tables=false \ | ||
--routines --triggers --events \ | --routines --triggers --events \ | ||
Version du 8 janvier 2026 à 10:24
Sauvegarder et restaurer une BDD.
mysqldump \
--single-transaction --quick --lock-tables=false \
--routines --triggers --events \
-u root -p \
bdd_dev | gzip > ~/bdd_dev.sql.gz
🔍 Vue d’ensemble
mysqldump … bdd_dev: exporte la basebdd_deven SQL (DDL + données).| gzip > ~/bdd_dev.sql.gz: compresse le flux SQL à la volée et l’écrit dans~/bdd_dev.sql.gz.
C’est une sauvegarde “à chaud” (sans bloquer les écritures sur InnoDB) qui inclut procédures stockées, triggers et événements.
🧩 Détail des options
📦 Cohérence & verrous
--single-transaction
Démarre une transaction (en REPEATABLE READ) pour un instantané cohérent des tables InnoDB sans les verrouiller en écriture. > ⚠️ N’a pas d’effet sur MyISAM ; pour MyISAM, il faudrait des verrous.
--lock-tables=false
Désactive le verrouillage global des tables.
Utile avec --single-transaction pour éviter d’interrompre la prod sur InnoDB.
--quick
Stream les lignes une par une (utilise un curseur serveur) au lieu de charger une table entière en RAM.
⇒ Réduit la mémoire et accélère l’export sur de grosses tables.
🧠 Métadonnées & objets de la base
--routines: inclut les procédures stockées et fonctions.--triggers: inclut les triggers (souvent activé par défaut, on l’indique explicitement).--events: inclut les événements du scheduler.
🔐 Connexion
-u root -p: se connecte en tant que root et demande le mot de passe (prompte sans l’exposer en clair dans l’historique).
🎯 Cible
bdd_dev: nom de la base à dumper.
🗜️ Compression
| gzip > ~/bdd_dev.sql.gz: compresse le dump en flux (pas de fichier.sqlintermédiaire), puis l’enregistre dans~/bdd_dev.sql.gz.
🔁 Restaurer la sauvegarde
Plusieurs méthodes équivalentes :
1) Avec zcat (ou gunzip -c)
zcat ~/bdd_dev.sql.gz | mysql -u root -p bdd_dev
# ou
gunzip -c ~/bdd_dev.sql.gz | mysql -u root -p bdd_dev
2) Décompresser puis importer
gunzip ~/bdd_dev.sql.gz # produit ~/bdd_dev.sql
mysql -u root -p bdd_dev < ~/bdd_dev.sql
La base
bdd_devdoit exister si le dump ne contient pasCREATE DATABASE. Tu peux la créer :
CREATE DATABASE bdd_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
✅ Bonnes pratiques & remarques
- InnoDB recommandé :
--single-transactiongarantit une sauvegarde cohérente sans locks seulement pour InnoDB.
Si tu as des tables MyISAM, attend-toi à des incohérences possibles si l’appli écrit pendant le dump ; sinon utilise --lock-all-tables (impactant).
- Performances :
--quick+gzipen pipeline réduit RAM et disque ; utile pour de très grosses bases. - Sécurité des identifiants : évite
-p<motdepasse>(fuites via historique/process list).
Tu peux utiliser un fichier ~/.my.cnf : ini [client] user=root password=TON_MDP Puis lancer : bash mysqldump --single-transaction --quick --lock-tables=false --routines --triggers --events bdd_dev | gzip > ~/bdd_dev.sql.gz
- Compatibilité MySQL/MariaDB :
mysqldumpde MariaDB et de MySQL sont proches mais pas identiques pour certaines fonctionnalités (GTID, options exotiques). Reste cohérent : dumper et restaurer avec des versions compatibles (idéalement même majeure). - Réplicas/GTID (si tu t’en sers) : pense aux options
--set-gtid-purged=OFF|ON|AUTOselon ta cible. Pour un simple backup/restauration non-réplication, laisse le défaut (souventAUTO). - Objets manquants : si tu veux tout capturer (utilisateurs/privileges),
mysqldumpstandard n’exporte pas les comptes. Utilisemysqlpump --users(MySQL) ou exportemysql.user/mysql.dbavec prudence, ou rejoue desGRANT. - Éviter de dumper vers
/mnt/c/...sous WSL : préfère un chemin natif Linux (~), les I/O seront bien plus rapides.
📌 Variantes utiles
- Inclure la structure sans les données :
bash mysqldump --no-data bdd_dev > schema.sql - Inclure uniquement certaines tables :
bash mysqldump --single-transaction --quick bdd_dev table1 table2 | gzip > subset.sql.gz - Exclure une table volumineuse (nécessite
--ignore-tablepar table) :bash mysqldump --single-transaction --quick \ --ignore-table=bdd_dev.logs \ bdd_dev | gzip > sans_logs.sql.gz