Copias de seguridad en MySQL: mysqldump, SELECT INTO y restauración
Resumen
Este documento explica los dos tipos de copias de seguridad, físicas y lógicas, y cómo realizarlas en MySQL. Se detalla el uso de mysqldump con sus opciones principales y ejemplos, así como la creación de copias con SELECT INTO y su restauración con LOAD DATA INFILE. También recoge los problemas habituales al restaurar y las pautas para elegir la estrategia adecuada.
Puntos clave
- Una copia física copia los ficheros de la base de datos y normalmente requiere parar el motor (copia en frío).
- Una copia lógica exporta los datos a SQL o texto; es más lenta, pero permite intercambiar datos entre distintos SGBD y suele hacerse en caliente.
- mysqldump genera instrucciones SQL para recrear tablas o bases de datos; sin nombre de tablas ni --databases o --all-databases vuelca bases de datos enteras.
- La opción --where permite volcar solo los registros que cumplen una condición WHERE, y --add-locks acelera la recarga del volcado.
- Para restaurar un volcado SQL se usa mysqldump con redirección < o el comando source desde el cliente MySQL.
- SELECT ... INTO OUTFILE crea la copia lógica y LOAD DATA INFILE la restaura, pudiendo fallar por permisos, caracteres/terminadores distintos, ruta incorrecta o archivo ya existente.
Copias de seguridad físicas y lógicas
Concepto general
Física: realizar un respaldo de todos los ficheros de la base de datos; generalmente se realiza en frío, es decir, hay que parar el motor de la base de datos.
Lógica: se exportan los datos del esquema de la base de datos a un fichero SQL o a un fichero de texto. Es bastante lenta, pero tiene la ventaja de que se pueden intercambiar datos entre los diferentes sistemas gestores de bases de datos. Tiene el nombre de exportación de datos. Cuando restauramos una copia de seguridad lógica en un SGBD, el proceso se conoce como importación de datos. Las copias lógicas generalmente se hacen en caliente; no es necesario parar el motor de la base de datos.
Mysqldump
mysqldump realiza un volcado de las instrucciones SQL necesarias para crear las tablas o las bases de datos que se quieran copiar. El archivo creado se puede ver en cualquier editor de texto. Las copias de seguridad se almacenan en bin si no se indica lo contrario.
Tres maneras de usar mysqldump
mysqldump [opciones] nombre_de_base_de_datos [tablas]mysqldump [opciones] --databases DB1 [DB2 DB3 ...]mysqldump [opciones] --all-databases
Si no se nombra ninguna tabla o se utiliza la opción --databases o --all-databases, se vuelcan bases de datos enteras.
Opciones a destacar
- --add-drop-table: añade un comando
DROP TABLEantes de cada comandoCREATE TABLE. - --add-locks: rodea cada volcado de tabla con los comandos
LOCK TABLESyUNLOCK TABLES. Esto provoca inserciones más rápidas cuando el fichero volcado se recarga. - --all-databases, -A: vuelca todas las tablas en todas las bases de datos. Es como utilizar la opción
--databasesy nombrar todas las bases de datos en la línea de comandos. - --databases, -B: vuelca varias bases de datos. Normalmente, mysqldump trata el primer argumento de la línea de comandos como un nombre de base de datos y los siguientes como nombres de tablas; con esta opción trata todos los argumentos como nombres de bases de datos. Los comandos
CREATE DATABASE IF NOT EXISTS nombre_de_base_de_datosyUSE nombre_de_base_de_datosestán incluidos en la salida. - --quick, -q: vuelca tablas grandes. Recibe los registros de una tabla del servidor uno a uno.
- --result-file=fichero, -r fichero: redirige la salida a un fichero dado. Debe usarse en Windows.
- --tables: tiene mayor prioridad que
--databaseso-B. Todos los argumentos que vienen después de esta opción se tratan como nombres de tablas. - --user=nombre_de_usuario, -u nombre_de_usuario: nombre de usuario MySQL a usar al conectar con el servidor.
- --verbose, -v: modo explícito. Muestra más información sobre lo que hace el programa.
- --where='condición_where', -w 'condición_where': vuelca registros seleccionados por la condición
WHERE. Las comillas de la condición son obligatorias si contienen espacios o caracteres especiales.
Ejemplos de uso
mysqldump -u root -p --where='campo1=juan' concesionario tabla 2 > c:/copia.copia3.sql: Se limita el volcado de registros en la tabla 2 de la BD concesionario a todos aquellos que cumplen quecampo1='juan'.mysqldump -u root -p concesionario tabla > c:/copia.copia.sql: Copia de seguridad de la tabla tabla de la BD concesionario y se vuelca el archivocopia.sqlen el directorio indicado.mysqldump -u root -p concesionario > c:/copia.copia2.sql: Copia de seguridad de toda la BD concesionario.
Restaurar copia de seguridad
Restaurar volcando el fichero SQL con el cliente MySQL:
mysqldump -u root -p concesionario < c:/copia.copia1.sql- También se puede recuperar mediante:
source nombrearchivo.sql(desde el cliente MySQL).
Copias de seguridad lógicas con SELECT INTO
Crear: SELECT ... INTO OUTFILE 'ruta y nombre del archivo'.
Restaurar una copia creada con SELECT INTO:
LOAD DATA INFILE 'nombredearchivo' INTO TABLE nombre_tabla;
Problemas en la restauración
- No se tienen permisos para leer archivos del servidor.
- No se han utilizado los mismos caracteres y terminadores de cierre en
SELECT ... INTOque enLOAD DATA. - El nombre de la ruta y del archivo no se ha especificado correctamente.
- No es posible sobrescribir un archivo existente.
Notas finales
Las diferencias entre copias físicas y lógicas (y las herramientas para cada una) determinan qué estrategia es más adecuada según el caso: tiempo de inactividad aceptable, tamaño de la base de datos, compatibilidad entre SGBD, y requisitos de recuperación. Las opciones de mysqldump permiten adaptar los volcados a necesidades concretas (tablas específicas, condiciones WHERE, múltiples bases de datos, etc.).
Descargar
PDF Word HTMLPreguntas frecuentes
¿Cuál es la diferencia entre copia de seguridad física y lógica?
La física copia los ficheros de la base de datos y normalmente exige parar el motor. La lógica exporta los datos a un fichero SQL o de texto, es más lenta pero permite intercambiarlos entre distintos SGBD.
¿Cómo restaurar una copia hecha con mysqldump?
Se puede ejecutar mysqldump -u root -p concesionario < c:/copia.sql o usar el comando source nombrearchivo.sql desde el cliente MySQL.
¿Qué hacer si falla la restauración con LOAD DATA INFILE?
Hay que comprobar los permisos de lectura de archivos del servidor, que los caracteres y terminadores coincidan con los usados en SELECT ... INTO, que la ruta sea correcta y que el archivo no exista ya.
Ponte a prueba
Tarjetas de repaso
Pulsa una tarjeta para ver la respuesta.
Test
Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.