Aller au contenu

« Mysqldump » : différence entre les versions

De Marmits Wiki
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
Sauvegarder et restaurer une BDD.
Sauvegarder et restaurer une BDD.


<syntaxhighlight lang="bash" copy>mysqldump \
<syntaxhighlight lang="MySQL" 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:25

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 base bdd_dev en 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 .sql intermé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_dev doit exister si le dump ne contient pas CREATE DATABASE. Tu peux la créer :

CREATE DATABASE bdd_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

✅ Bonnes pratiques & remarques

  • InnoDB recommandé : --single-transaction garantit 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 + gzip en 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 : mysqldump de 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|AUTO selon ta cible. Pour un simple backup/restauration non-réplication, laisse le défaut (souvent AUTO).
  • Objets manquants : si tu veux tout capturer (utilisateurs/privileges), mysqldump standard n’exporte pas les comptes. Utilise mysqlpump --users (MySQL) ou exporte mysql.user/mysql.db avec prudence, ou rejoue des GRANT.
  • É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-table par table) : bash mysqldump --single-transaction --quick \ --ignore-table=bdd_dev.logs \ bdd_dev | gzip > sans_logs.sql.gz