Un volcado es un archivo de texto con sentencias SQL. Que se restaure depende de cómo se escribió, y los valores por defecto no son los adecuados para un sitio en producción. Casi todos los fallos de importación se deciden semanas antes, al hacer el volcado.
La orden
mysqldump \
--single-transaction \
--quick \
--routines --triggers --events \
--default-character-set=utf8mb4 \
--set-gtid-purged=OFF \
dbname | gzip > db-$(date +\%F).sql.gz
Qué evita cada una
- --single-transaction: una instantánea coherente sin bloquear tablas. Sin ella, un sitio con tráfico queda congelado durante todo el volcado.
- --quick: transmite fila a fila en vez de cargar una tabla grande en memoria.
- --routines --triggers --events: no se incluyen por defecto. Una restauración sin ellas parece completa y pierde en silencio todos los procedimientos almacenados y todos los eventos programados.
- --default-character-set=utf8mb4: el árabe y los emojis sobreviven a la ida y la vuelta.
--single-transaction solo es coherente con InnoDB. Una tabla MyISAM en la misma base se vuelca sin esa garantía: conviértelas o acepta una copia incoherente de esas tablas.
Verifica el archivo, no el código de salida
gzip -t db-2026-09-05.sql.gz # the archive is intact
zcat db-2026-09-05.sql.gz | tail -5 # ends with "Dump completed"
zcat db-2026-09-05.sql.gz | grep -c "CREATE TABLE"
Un volcado cortado porque se llenó el disco sigue siendo un gzip válido en casi toda su longitud. La línea de cierre al final es la prueba de que mysqldump llegó hasta el final, y comprobarla cuesta una sola orden.
Restáuralo en otro sitio, con periodicidad
mysql -e "CREATE DATABASE restore_test CHARACTER SET utf8mb4"
zcat db-2026-09-05.sql.gz | mysql restore_test
mysql restore_test -e "SELECT COUNT(*) FROM orders"
Compara ese recuento de filas con producción. Un volcado que se importa sin errores y llega con la mitad de las filas es el fallo que nadie descubre, porque la importación no dijo absolutamente nada.
