Tutorial completo de MySQL 8: instalación, administración, tipos de datos y backup (2026)

mysqldump es la herramienta de backup más usada en MySQL. Genera un fichero SQL que contiene las instrucciones CREATE TABLE y los INSERT necesarios para recrear la base de datos completa. El resultado es un fichero de texto legible, portable y fácilmente restaurable en cualquier instancia MySQL.

En este capítulo cubrimos las opciones más importantes de mysqldump, cómo comprimir y restaurar backups, y cómo automatizar el proceso con cron.

Backup básico con mysqldump

# Hacer backup de una base de datos completa
mysqldump -u root -p tienda > tienda_backup.sql

# Backup con timestamp en el nombre del fichero
mysqldump -u root -p tienda > "tienda_$(date +%Y%m%d_%H%M%S).sql"

# Backup de varias bases de datos
mysqldump -u root -p --databases tienda blog crm > multi_backup.sql

# Backup de todas las bases de datos
mysqldump -u root -p --all-databases > all_databases.sql

Opciones importantes

# --single-transaction: backup consistente sin bloquear la BD (InnoDB)
# Es la opción más importante para producción; evita bloquear lecturas y escrituras
mysqldump -u root -p --single-transaction tienda > tienda_backup.sql

# --no-tablespaces: necesario con MySQL 8+ si el usuario no tiene FILE privilege
mysqldump -u appuser -p --single-transaction --no-tablespaces tienda > backup.sql

# --routines: incluir procedimientos almacenados y funciones
# --events: incluir eventos programados del servidor
mysqldump -u root -p --single-transaction --routines --events tienda > backup_completo.sql

# --no-data: solo la estructura (sin los datos) — útil para migrar esquemas
mysqldump -u root -p --no-data tienda > esquema.sql

# --where: solo un subconjunto de datos
mysqldump -u root -p tienda pedidos --where="fecha >= '2026-01-01'" > pedidos_2026.sql

Comprimir el backup

# Comprimir con gzip directamente (sin fichero intermedio)
mysqldump -u root -p --single-transaction tienda | gzip > "tienda_$(date +%Y%m%d).sql.gz"

# Descomprimir y restaurar en un solo comando
gunzip < tienda_20260509.sql.gz | mysql -u root -p tienda

Restaurar un backup

# Restaurar en una base de datos existente
mysql -u root -p tienda < tienda_backup.sql

# Crear la base de datos primero (si no existe)
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS tienda CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
mysql -u root -p tienda < tienda_backup.sql

# Verificar que la restauración fue correcta
mysql -u root -p tienda -e "SHOW TABLES;"
mysql -u root -p tienda -e "SELECT COUNT(*) FROM clientes;"

Backup automático con cron

# Crear un fichero de credenciales (~/.my.cnf) para no escribir la contraseña en cron
# chmod 600 ~/.my.cnf
# Contenido:
# [mysqldump]
# user=backupuser
# password=contraseña_segura

# Añadir tarea cron: backup diario a las 3:00 AM con retención de 30 días
crontab -e
# 0 3 * * * mysqldump --single-transaction --no-tablespaces tienda | gzip > /backups/tienda_$(date +\%Y\%m\%d).sql.gz && find /backups -name "tienda_*.sql.gz" -mtime +30 -delete

mysqlpump y MySQL Shell (alternativas modernas)

# mysqlpump: versión paralela de mysqldump (más rápida para BD grandes)
mysqlpump --single-transaction --default-parallelism=4 tienda > backup.sql

# MySQL Shell (mysqlsh): backup con compresión nativa, progreso y cifrado
mysqlsh root@localhost -- util dumpSchemas tienda --outputUrl=/backups/tienda --compression=zstd

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP