Categorías: Noticias

Hacer backup y restaurar copia de seguridad con MySQL

Siempre que manejamos una base de datos, uno de los detalles más a tener en cuenta es la recuperación de la información en caso de fallo del sistema o de ataque de un tercero. MySQL es la elegida por muchos proyectos y desarrollos libres, por lo que a través de esta entrada vamos a explicar cómo proceder a realizar una copia de seguridad, para su posterior restauración.

Veremos dos métodos: copiar directamente los datos que maneja el sistema y generar un volcado a un fichero texto (un dump).

Copiar ficheros de la base de datos

MySQL utiliza la misma estructura de almacenamiento de datos en distintas plataformas, por lo que podemos directamente copiar los ficheros binarios que contienen las tablas, disparadores, funciones, procedimientos, etc.

¿Cómo hacerlo? Copiando y pegando directamente los ficheros del directorio /data de MySQL. Para restaurar los datos podemos hacer directamente el proceso contrario. El único problema que podemos encontrarnos es que al copiar y pegar entre distintos sistemas operativos, por ejemplo de Linux a Windows, en el primer caso las tablas y los ficheros sí serán sensibles a mayúsculas y en el segundo no.

La solución, usar siempre tablas en minúscula. Además, gracias al comentario de carlos apunto otro detalle muy a tener en cuenta (que se me había pasado comentar), parar el servicio antes de realizar la copia:

$ sudo services mysqld stop o $ sudo /etc/init.d/mysqld stop, dependiendo de nuestra distribución.

Exportar datos a un fichero texto

La solución más frecuente no es la primera, que a priori, es bastante simple y encima es mucho más rápida y eficiente (nos olvidamos de tener que generar y leer luego un fichero texto como en este caso). Sin embargo, esta segunda solución es más versátil. En servicios web normalmente no tenemos acceso a los datos almacenados en disco y tenemos que hacer todo a través del cliente MySQL.

¿Cómo? Con la ayuda de mysqldump, el programa que gestiona la creación de este tipo de volcados en formato texto. A pesar de que su sintaxis es bastante rica y tiene muchas opciones, os voy a decir cómo hacer uso del mismo de una forma sencilla y con un resultado que probablemente sea el que busquéis:

$ mysqldump –-opt --verbose --user=tuUsuario --password=tuPassword
 --host=direccion--all-databases > “volcado.sql”

El significado de los parámetros es:

  • –opt: Equivalente a indicar los parámetros básicos para crear un volcado correcto:
    • –add-drop-table: Borrados de comprobación.
    • –add-locks: Utiliza cerrojos para evitar problemas de sección crítica.
    • –create-options: Incluye todas las opciones específicas en los CREATE TABLE.
    • –disable-keys: Crea los índices tras insertar las filas, así es más rápida la importación.
    • –extended-insert: Reduce el tamaño del volcado, aprovechando mejor cada sentencia INSERT
    • –lock-tables: Bloquea la tabla mientras se realiza el volcado. –quick: Acelera el proceso de volcado.
    • –set-charset: Añade sentencias SET NAMES para establecer juegos de caracteres.
  • –verbose: Modo verbose, muestra más información.
  • –user: Usuario.
  • –password: Contraseña.
  • –host: Servidor
  • –all-databases: hace el volcado de todas las bases de datos del sistema, sin necesidad de especificarlas una a una.

El proceso contrario, el volcar en el destino los datos presentes en el fichero SQL recién creado es más simple:

$ mysql --user=tuUsuario --password=tuPassword
 --host=direccionServidor "volcado.sql"

De esta forma ya tendremos insertados los datos que acabamos de volcar en caso de pérdida. Otro día hablaremos de cómo incluir este proceso en el cron para asegurarnos de que se ejecuta de forma periódica y despreocuparnos de este tema.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • tu estás un poco loco, no? En el primer caso, antes de hacer nada, ¡¡¡¡para el servicio!!!!

  • @carlos: Mil gracias por el apunte. Acabo de actualizar la entrada. Se me había pasado completamente.

  • @javier parra: Me alegro que os haya gustado.

    ¿Qué otro contenido de este tipo os gustaría leer? ¿De PostgreSQL quizás algo similar?

  • Me esta mostrando el siguiente error cuando se ejecuta el cron job... no tengo derechos para modificar nada del servidor...

    mysqldump: unknown variable 'max_heap_table_size=256M'

    que puedo hacer?

  • Estimado Javier, me parecio muy buena tu publicacion, de hecho t comento q yo ya hice el backup de mi base de datos y es caso similar al que tu muestras en la parte superior, pero ahora me nace una inquietud como puedo hacer para restaurar el backup hecho, por favor si alguna información tienes ayudame con algunas pautas para hacer la restauración .... espero tu respuesta se te agradece mucho....!!!

  • @Karlita Jiménez: Aquí está el proceso contrario (siendo drupal la base de datos y drupal_backup.sql el fichero SQL):

    mysql -u admin -p drupal < drupal_backup.sql

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace