SQL
Tutorial SQL: Copias de seguridad y restauración de bases de datos
Aprende a crear y restaurar copias de seguridad en MySQL y PostgreSQL con técnicas y buenas prácticas esenciales para proteger tus datos.
Aprende SQL y certifícateCrear backup exportando datos
Realizar copias de seguridad de nuestras bases de datos es una práctica fundamental para proteger la información contra pérdidas accidentales, fallos de hardware o errores humanos. La exportación de datos es uno de los métodos más comunes y efectivos para crear backups en sistemas de bases de datos relacionales.
En este apartado nos centraremos en las técnicas para exportar datos desde MySQL y PostgreSQL, generando archivos que contienen tanto la estructura como los datos de nuestras tablas.
Exportación de datos en MySQL
MySQL ofrece la herramienta mysqldump, un programa de línea de comandos que permite crear copias de seguridad completas o parciales de nuestras bases de datos. Esta utilidad genera un archivo SQL con todas las instrucciones necesarias para recrear la base de datos.
Sintaxis básica de mysqldump
La sintaxis general para usar mysqldump es:
mysqldump -u [usuario] -p [opciones] [base_de_datos] > archivo_backup.sql
Algunos ejemplos prácticos:
- Exportar una base de datos completa:
mysqldump -u root -p tienda > tienda_backup.sql
- Exportar tablas específicas:
mysqldump -u root -p tienda clientes pedidos > tienda_clientes_pedidos.sql
- Exportar solo la estructura (sin datos):
mysqldump -u root -p --no-data tienda > tienda_estructura.sql
- Exportar solo los datos (sin estructura):
mysqldump -u root -p --no-create-info tienda > tienda_datos.sql
Opciones avanzadas de mysqldump
MySQL ofrece opciones adicionales para personalizar nuestros backups:
- Incluir procedimientos almacenados y funciones:
mysqldump -u root -p --routines tienda > tienda_con_rutinas.sql
- Incluir eventos programados:
mysqldump -u root -p --events tienda > tienda_con_eventos.sql
- Exportar múltiples bases de datos:
mysqldump -u root -p --databases tienda inventario > multiples_dbs.sql
- Exportar todas las bases de datos:
mysqldump -u root -p --all-databases > todas_las_dbs.sql
Compresión de backups en MySQL
Para bases de datos grandes, es recomendable comprimir los backups para ahorrar espacio:
mysqldump -u root -p tienda | gzip > tienda_backup.sql.gz
Para descomprimir posteriormente:
gunzip < tienda_backup.sql.gz | mysql -u root -p tienda
Exportación de datos en PostgreSQL
PostgreSQL proporciona la herramienta pg_dump para crear copias de seguridad. Similar a mysqldump, genera archivos que contienen los comandos SQL necesarios para reconstruir la base de datos.
Sintaxis básica de pg_dump
La sintaxis general para usar pg_dump es:
pg_dump -U [usuario] [opciones] [base_de_datos] > archivo_backup.sql
Ejemplos prácticos:
- Exportar una base de datos completa:
pg_dump -U postgres tienda > tienda_backup.sql
- Exportar en formato comprimido:
pg_dump -U postgres -Fc tienda > tienda_backup.dump
- Exportar solo la estructura:
pg_dump -U postgres --schema-only tienda > tienda_estructura.sql
- Exportar solo los datos:
pg_dump -U postgres --data-only tienda > tienda_datos.sql
Formatos de salida en PostgreSQL
PostgreSQL permite exportar en diferentes formatos, cada uno con ventajas específicas:
- Formato de texto plano (por defecto):
pg_dump -U postgres -F p tienda > tienda_backup.sql
- Formato personalizado (comprimido y permite restauración selectiva):
pg_dump -U postgres -F c tienda > tienda_backup.dump
- Formato de directorio (crea un directorio con archivos para cada tabla):
pg_dump -U postgres -F d tienda -f directorio_backup
- Formato de archivo tar (similar al formato de directorio pero en un solo archivo):
pg_dump -U postgres -F t tienda > tienda_backup.tar
Exportación selectiva en PostgreSQL
PostgreSQL ofrece opciones para exportar partes específicas de la base de datos:
- Exportar tablas específicas:
pg_dump -U postgres -t clientes -t pedidos tienda > tablas_especificas.sql
- Exportar un esquema específico:
pg_dump -U postgres -n public tienda > esquema_public.sql
- Excluir tablas específicas:
pg_dump -U postgres -T logs -T temp_data tienda > sin_tablas_temporales.sql
Automatización de backups
Para garantizar la seguridad de nuestros datos, es recomendable automatizar el proceso de creación de backups mediante scripts programados.
Script básico para MySQL
#!/bin/bash
# Script para backup diario de MySQL
# Variables
FECHA=$(date +%Y-%m-%d)
USUARIO="root"
PASSWORD="tu_contraseña"
BD="tienda"
RUTA_BACKUP="/ruta/backups"
# Crear directorio si no existe
mkdir -p $RUTA_BACKUP
# Realizar backup
mysqldump -u $USUARIO -p$PASSWORD $BD | gzip > $RUTA_BACKUP/$BD-$FECHA.sql.gz
# Eliminar backups antiguos (más de 30 días)
find $RUTA_BACKUP -name "*.sql.gz" -type f -mtime +30 -delete
Script básico para PostgreSQL
#!/bin/bash
# Script para backup diario de PostgreSQL
# Variables
FECHA=$(date +%Y-%m-%d)
USUARIO="postgres"
BD="tienda"
RUTA_BACKUP="/ruta/backups"
# Crear directorio si no existe
mkdir -p $RUTA_BACKUP
# Realizar backup
export PGPASSWORD="tu_contraseña"
pg_dump -U $USUARIO -Fc $BD > $RUTA_BACKUP/$BD-$FECHA.dump
# Eliminar backups antiguos (más de 30 días)
find $RUTA_BACKUP -name "*.dump" -type f -mtime +30 -delete
Buenas prácticas para la exportación de datos
Para maximizar la efectividad de nuestras copias de seguridad, es importante seguir estas recomendaciones:
- Programar backups regulares: Establece una frecuencia adecuada según la criticidad de los datos.
- Verificar la integridad de los backups periódicamente realizando pruebas de restauración.
- Almacenar copias en múltiples ubicaciones, incluyendo servidores remotos o servicios en la nube.
- Documentar el proceso de backup y restauración para que cualquier miembro del equipo pueda ejecutarlo.
- Cifrar los backups que contengan información sensible.
- Monitorizar el espacio disponible en los sistemas de almacenamiento de backups.
- Etiquetar claramente cada backup con información como fecha, versión y contenido.
Exportación de datos con herramientas gráficas
Además de las herramientas de línea de comandos, existen interfaces gráficas que facilitan la creación de backups.
MySQL Workbench
MySQL Workbench ofrece una interfaz intuitiva para exportar datos:
- Selecciona "Server" > "Data Export" en el menú principal.
- Elige la base de datos o tablas específicas a exportar.
- Selecciona entre "Export to Self-Contained File" o "Export to Dump Project Folder".
- Configura opciones adicionales como incluir rutinas o eventos.
- Haz clic en "Start Export" para iniciar el proceso.
pgAdmin para PostgreSQL
pgAdmin simplifica la exportación de datos en PostgreSQL:
- Haz clic derecho en la base de datos que deseas exportar.
- Selecciona "Backup..." en el menú contextual.
- Configura el formato de salida, compresión y otras opciones.
- Especifica la ruta del archivo de salida.
- Haz clic en "Backup" para iniciar el proceso.
La exportación regular de datos es una parte esencial de cualquier estrategia de administración de bases de datos. Implementando estas técnicas, podrás proteger eficazmente la información almacenada en tus sistemas MySQL y PostgreSQL contra posibles pérdidas o daños.
Restaurar backup
La capacidad de restaurar correctamente una copia de seguridad es tan importante como crearla. Incluso el mejor sistema de backups resulta inútil si no podemos recuperar los datos cuando los necesitamos. En esta sección aprenderemos cómo restaurar backups en MySQL y PostgreSQL, asegurándonos de que nuestros datos puedan ser recuperados eficientemente en caso de emergencia.
Restauración de backups en MySQL
MySQL ofrece varios métodos para restaurar copias de seguridad, dependiendo del formato en que fueron creadas. El proceso más común implica utilizar el cliente de línea de comandos mysql
para ejecutar los archivos SQL generados previamente con mysqldump
.
Restauración básica desde un archivo SQL
Para restaurar una base de datos completa desde un archivo SQL:
mysql -u root -p [nombre_base_datos] < archivo_backup.sql
Si la base de datos aún no existe, primero debes crearla:
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS [nombre_base_datos]"
mysql -u root -p [nombre_base_datos] < archivo_backup.sql
Ejemplos prácticos:
- Restaurar una base de datos existente:
mysql -u root -p tienda < tienda_backup.sql
- Restaurar desde un backup comprimido:
gunzip < tienda_backup.sql.gz | mysql -u root -p tienda
Restauración selectiva en MySQL
A veces necesitamos restaurar solo partes específicas de una base de datos. Aunque MySQL no ofrece una forma directa de restaurar tablas individuales desde un archivo de backup completo, podemos usar algunas técnicas:
- Extraer definiciones de tablas específicas de un archivo de backup:
grep -n "CREATE TABLE \`clientes\`" tienda_backup.sql
Esto nos mostrará los números de línea donde comienza la definición de la tabla, permitiéndonos extraer solo esa parte.
- Restaurar solo la estructura (si tenemos un backup de solo estructura):
mysql -u root -p tienda < tienda_estructura.sql
- Restaurar solo los datos (si tenemos un backup de solo datos):
mysql -u root -p tienda < tienda_datos.sql
Opciones avanzadas de restauración en MySQL
MySQL ofrece opciones adicionales para controlar el proceso de restauración:
- Restaurar con progreso visible (útil para backups grandes):
pv tienda_backup.sql | mysql -u root -p tienda
Nota: Requiere instalar la utilidad pv
(pipe viewer).
- Restaurar con control de errores:
mysql -u root -p --force tienda < tienda_backup.sql
La opción --force
continúa la restauración incluso si se encuentran errores.
- Restaurar con mayor velocidad (desactivando temporalmente restricciones):
mysql -u root -p --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" tienda < tienda_backup.sql
Restauración de backups en PostgreSQL
PostgreSQL proporciona herramientas específicas para restaurar backups según el formato en que fueron creados. La principal utilidad es pg_restore
para formatos personalizados, y el cliente psql
para archivos SQL de texto plano.
Restauración desde formato de texto plano
Si el backup se creó en formato de texto plano (SQL):
psql -U postgres -d [nombre_base_datos] -f archivo_backup.sql
Si la base de datos no existe:
createdb -U postgres [nombre_base_datos]
psql -U postgres -d [nombre_base_datos] -f archivo_backup.sql
Ejemplo práctico:
psql -U postgres -d tienda -f tienda_backup.sql
Restauración desde formato personalizado
Para backups creados con el formato personalizado (-Fc
), debemos usar pg_restore
:
pg_restore -U postgres -d [nombre_base_datos] archivo_backup.dump
Ejemplos prácticos:
- Restaurar en una base de datos existente:
pg_restore -U postgres -d tienda tienda_backup.dump
- Crear la base de datos y restaurar en un solo paso:
pg_restore -U postgres -C -d postgres tienda_backup.dump
La opción -C
crea la base de datos antes de restaurar.
Restauración selectiva en PostgreSQL
Una de las ventajas del formato personalizado de PostgreSQL es la capacidad de restaurar selectivamente objetos específicos:
- Listar el contenido de un archivo de backup:
pg_restore -l tienda_backup.dump > lista_contenido.txt
- Editar la lista para seleccionar solo ciertos objetos y luego restaurar:
pg_restore -U postgres -d tienda -L lista_editada.txt tienda_backup.dump
- Restaurar solo tablas específicas:
pg_restore -U postgres -d tienda -t clientes -t pedidos tienda_backup.dump
- Restaurar solo el esquema (estructura) sin datos:
pg_restore -U postgres -d tienda --schema-only tienda_backup.dump
- Restaurar solo los datos sin la estructura:
pg_restore -U postgres -d tienda --data-only tienda_backup.dump
Opciones avanzadas de restauración en PostgreSQL
PostgreSQL ofrece opciones adicionales para personalizar el proceso de restauración:
- Restaurar con mayor paralelismo (más rápido en sistemas multicore):
pg_restore -U postgres -d tienda -j 4 tienda_backup.dump
La opción -j
especifica el número de procesos paralelos.
- Restaurar sin propietarios (útil al migrar entre servidores):
pg_restore -U postgres -d tienda --no-owner tienda_backup.dump
- Restaurar sin privilegios:
pg_restore -U postgres -d tienda --no-privileges tienda_backup.dump
Verificación post-restauración
Después de restaurar una base de datos, es crucial verificar que la restauración se haya completado correctamente:
Verificación en MySQL
-- Verificar que todas las tablas existen
SHOW TABLES;
-- Comprobar el número de registros en tablas críticas
SELECT COUNT(*) FROM clientes;
SELECT COUNT(*) FROM pedidos;
-- Verificar la integridad referencial
CHECK TABLE clientes, pedidos, productos FOR UPGRADE;
Verificación en PostgreSQL
-- Verificar que todas las tablas existen
\dt
-- Comprobar el número de registros en tablas críticas
SELECT COUNT(*) FROM clientes;
SELECT COUNT(*) FROM pedidos;
-- Verificar la integridad de la base de datos
VACUUM ANALYZE;
Restauración en entornos de producción
Cuando se restaura un backup en un entorno de producción, hay consideraciones adicionales que debemos tener en cuenta:
- Planificar una ventana de mantenimiento para minimizar el impacto en los usuarios.
- Notificar a los usuarios sobre el tiempo de inactividad esperado.
- Crear un backup adicional del estado actual antes de restaurar.
- Probar la restauración en un entorno de pruebas antes de aplicarla en producción.
- Documentar cada paso del proceso de restauración.
Solución de problemas comunes durante la restauración
Es normal encontrar algunos obstáculos durante el proceso de restauración. Estos son algunos problemas frecuentes y sus soluciones:
Problemas en MySQL
- Error de tabla ya existente:
mysql -u root -p --init-command="SET SESSION FOREIGN_KEY_CHECKS=0;" tienda < tienda_backup.sql
- Error de codificación de caracteres:
mysql -u root -p --default-character-set=utf8mb4 tienda < tienda_backup.sql
- Timeout en restauraciones grandes:
mysql -u root -p --max_allowed_packet=1G tienda < tienda_backup.sql
Problemas en PostgreSQL
- Error de rol no existente:
pg_restore -U postgres --no-owner -d tienda tienda_backup.dump
- Conflictos con objetos existentes:
pg_restore -U postgres --clean -d tienda tienda_backup.dump
La opción --clean
elimina los objetos antes de crearlos nuevamente.
- Errores de codificación:
pg_restore -U postgres --encoding=UTF8 -d tienda tienda_backup.dump
Restauración con herramientas gráficas
Las interfaces gráficas también facilitan el proceso de restauración para usuarios menos familiarizados con la línea de comandos.
MySQL Workbench
- Selecciona "Server" > "Data Import" en el menú principal.
- Elige "Import from Self-Contained File" y selecciona el archivo de backup.
- Selecciona la base de datos de destino o crea una nueva.
- Configura las opciones de importación según sea necesario.
- Haz clic en "Start Import" para iniciar el proceso.
pgAdmin para PostgreSQL
- Haz clic derecho en la base de datos donde deseas restaurar.
- Selecciona "Restore..." en el menú contextual.
- Selecciona el archivo de backup y configura las opciones.
- Ajusta las opciones en las pestañas "Restore options" según necesites.
- Haz clic en "Restore" para iniciar el proceso.
Estrategias de restauración para diferentes escenarios
La estrategia de restauración debe adaptarse al tipo de incidente que ha provocado la necesidad de recuperar datos:
- Recuperación puntual (después de un error humano):
En MySQL:
mysql -u root -p tienda < tienda_backup_20230615.sql
En PostgreSQL:
pg_restore -U postgres -d tienda tienda_backup_20230615.dump
- Migración a un nuevo servidor:
En MySQL:
mysqldump -u root -p --routines --triggers tienda | mysql -h nuevo_servidor -u root -p tienda
En PostgreSQL:
pg_dump -U postgres -Fc tienda | pg_restore -U postgres -h nuevo_servidor -d tienda
- Restauración parcial (solo ciertas tablas después de corrupción):
En PostgreSQL (más sencillo con su formato personalizado):
pg_restore -U postgres -d tienda -t tabla_corrupta --clean tienda_backup.dump
La capacidad de restaurar eficientemente los backups es una habilidad fundamental para cualquier administrador de bases de datos. Dominar estas técnicas te permitirá responder con confianza ante situaciones de emergencia, minimizando el tiempo de inactividad y garantizando la integridad de tus datos.
Otras lecciones de SQL
Accede a todas las lecciones de SQL y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Sql
Introducción Y Entorno
Ddl Y Dml
Introducción Y Entorno
Instalación De Mysql
Introducción Y Entorno
Instalación De Postgresql
Introducción Y Entorno
Tipos De Datos
Introducción Y Entorno
Bases De Datos Y Tablas
Introducción Y Entorno
Sistemas De Gestión De Bases De Datos
Introducción Y Entorno
Tipos De Bases De Datos
Introducción Y Entorno
Creación De Bases De Datos Y Tablas: Create Database, Create Table
Sintaxis Dml Crud
Consultas Básicas De Selección: Select Y Where
Sintaxis Dml Crud
Inserción De Datos: Insert Into
Sintaxis Dml Crud
Actualización De Datos: Update
Sintaxis Dml Crud
Eliminación De Datos: Delete
Sintaxis Dml Crud
Introducción A Dml
Sintaxis Dml Crud
Consultar Datos: Select
Sintaxis Dml Crud
Clasificación De Resultados Con Order By
Filtros Y Clasificación
Filtrado De Valores Únicos Con Distinct
Filtros Y Clasificación
Paginación Con Limit Y Offset
Filtros Y Clasificación
Alterar La Estructura De Tablas Existentes: Alter Table
Sintaxis Ddl
Renombrar Tablas Y Bases De Datos: Rename
Sintaxis Ddl
Vaciar Tablas Y Bases De Datos: Drop
Sintaxis Ddl
Uso De Funciones Agregadas: Count, Sum, Avg, Max, Min
Funciones Y Agrupación
Agrupación De Resultados Con Group By
Funciones Y Agrupación
Filtrado De Grupos De Resultados Con Having
Funciones Y Agrupación
Funciones Numéricas Y Matemáticas
Funciones Y Agrupación
Funciones De Fecha Y Hora
Funciones Y Agrupación
Funciones De Texto
Funciones Y Agrupación
Many To One
Asociaciones Entre Tablas
One To Many
Asociaciones Entre Tablas
One To One
Asociaciones Entre Tablas
Many To Many
Asociaciones Entre Tablas
Relaciones Entre Tablas
Joins Y Subqueries
Uso De Inner Join, Left Join, Right Join, Full Join
Joins Y Subqueries
Creación Y Uso De Subqueries
Joins Y Subqueries
Left Join Y Right Join
Joins Y Subqueries
Full Join
Joins Y Subqueries
Cross Join Y Self Join
Joins Y Subqueries
Optimización De Consultas
Sintaxis Avanzada
Uso De Índices Y Particiones
Sintaxis Avanzada
Uso De Vistas
Sintaxis Avanzada
Triggers Y Eventos
Sintaxis Avanzada
Particiones
Sintaxis Avanzada
Restricciones E Integridad
Sintaxis Avanzada
Transacciones
Sintaxis Avanzada
Vistas Materializadas
Sintaxis Avanzada
Rollback
Sintaxis Avanzada
Vistas Con Create View
Sintaxis Avanzada
Principios Acid
Sintaxis Avanzada
Manejo De Errores Y Excepciones
Sintaxis Avanzada
Funciones Ventana
Sintaxis Avanzada
Índices
Sintaxis Avanzada
Expresiones De Tabla Comunes (Cte) Con With
Sintaxis Avanzada
Creación Y Uso De Funciones
Programación En Sql
Creación Y Uso De Procedimientos Almacenados
Programación En Sql
Variables Y Control De Flujo
Programación En Sql
Creación Y Manejo De Usuarios Y Roles
Seguridad Y Administración
Asignación Y Gestión De Permisos
Seguridad Y Administración
Copias De Seguridad Y Restauración De Bases De Datos
Seguridad Y Administración
Ejercicios de programación de SQL
Evalúa tus conocimientos de esta lección Copias de seguridad y restauración de bases de datos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Tipos de datos
Inserción de datos: INSERT INTO
Filtrado de grupos de resultados con HAVING
Uso de índices y particiones
Renombrar tablas y bases de datos: RENAME
Uso de vistas
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Agrupación de resultados con GROUP BY
Creación y uso de subqueries
Sentencias INSERT
Copias de seguridad y restauración de bases de datos
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Instalación de MySQL
Relaciones entre tablas
Eliminación de datos: DELETE
Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE
Creación y uso de funciones
Creación de tablas e inserción de datos con SQL
Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN
Optimización de consultas
Introducción a SQL
Triggers y eventos
Clasificación de resultados con ORDER BY
Alterar la estructura de tablas existentes: ALTER TABLE
Eliminación de datos: DELETE
Instalación de PostgreSQL
Creación y uso de procedimientos almacenados
Consultas básicas de selección: SELECT y WHERE
Vaciar tablas y bases de datos: DROP
Actualización de datos: UPDATE
Creación y manejo de usuarios y roles
Consultas básicas de selección SELECT y WHERE
Creación de bases de datos y tablas
Bases de datos y tablas
Actualización de datos: UPDATE
Relaciones entre tablas
Filtrado de valores únicos con DISTINCT
Asignación y gestión de permisos
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender cómo exportar datos y estructuras de bases de datos en MySQL y PostgreSQL.
- Aprender a restaurar backups desde diferentes formatos y con opciones avanzadas.
- Automatizar procesos de backup mediante scripts y programaciones.
- Identificar buenas prácticas para la gestión segura y eficiente de copias de seguridad.
- Resolver problemas comunes durante la restauración y utilizar herramientas gráficas para facilitar estos procesos.