« Mysqldump » : différence entre les versions
Aucun résumé des modifications Balise : Révocation manuelle |
|||
| Ligne 83 : | Ligne 83 : | ||
* '''Objets manquants''' : si tu veux '''tout''' capturer (utilisateurs/privileges), <code>mysqldump</code> standard '''n’exporte pas''' les comptes. Utilise <code>mysqlpump --users</code> (MySQL) ou exporte <code>mysql.user</code>/<code>mysql.db</code> avec prudence, ou rejoue des <code>GRANT</code>. | * '''Objets manquants''' : si tu veux '''tout''' capturer (utilisateurs/privileges), <code>mysqldump</code> standard '''n’exporte pas''' les comptes. Utilise <code>mysqlpump --users</code> (MySQL) ou exporte <code>mysql.user</code>/<code>mysql.db</code> avec prudence, ou rejoue des <code>GRANT</code>. | ||
* '''Éviter de dumper vers <code>/mnt/c/...</code> sous WSL''' : préfère un chemin natif Linux (<code>~</code>), les I/O seront bien plus rapides. | * '''Éviter de dumper vers <code>/mnt/c/...</code> sous WSL''' : préfère un chemin natif Linux (<code>~</code>), les I/O seront bien plus rapides. | ||
----- | ----- | ||
Dernière version du 8 janvier 2026 à 11:26
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