Página 1 de 1

Backup diario de nuestra base de datos MySQL  Tema Solucionado

Publicado: 19 Oct 2014, 10:59
por picaron
Hola, aquí os dejo la forma alternativa que utilizo para automatizar una copia de respaldo diaria de mis Bases de Datos MySQL sin necesidad de instalar ningún MOD adicional y que funciona de forma totalmente independiente al software que utilicemos en nuestra web, por lo que la podemos utilizar con nuestras Bases de Datos de PHPBB3 o con las de cualquier otra aplicación que funcione con PHP.

Objetivo:

- Realizar de forma automática una copia diaria de nuestra Base de Datos MySQL comprimida en formato GZip y almacenarla en una carpeta concreta de nuestro servidor, eliminando de forma automática las copias realizadas 5 días atrás.
- Poder restaurar a partir de esta copia de una forma limpia nuestra base de datos sin el engorroso problema de los "caracteres extraños".

Requisitos:

- Servidor Linux.
- Servidor MySQL.
- CPanel 11 o alternativa para poder programar tareas del tipo Cron Job.
- Y aconsejable Apache y PHP.


CONFIGURAR BACKUP DIARIO AUTOMÁTICO DE LA BASE DE DATOS

Pasos a seguir:

1.- Desde nuestro Cpanel Acceder al Administrador de Archivos y crear la carpeta copiadiaria en el mismo nivel donde se encuentra la carpeta public_html.
Normalmente la ruta debería ser así /home/EL_USUARIO_DE_TU_HOSTING/copiadiaria/

Imagen

2.- Dentro de la carpeta copiadiaria crear las carpetas archivos y logs
Las rutas deben quedar asi
/home/EL_USUARIO_DE_TU_HOSTING/copiadiaria/archivos/
/home/EL_USUARIO_DE_TU_HOSTING/copiadiaria/logs/

3.- Crear con nuestro editor de texto (yo os aconsejo el Notepad++) un archivo llamado copia_diaria.sh en el que copiaremos el código siguiente realizando previamente las modificaciones oportunas con relación a los datos de vuestra base de datos.

EL_USUARIO_DE_TU_HOSTING
NOMBRE_DE_USUARIO_DE_TU_BASE_DE_DATOS
PASSWORD_DEL_USUARIO_DE_TU_BASE_DE_DATOS
NOMBRE_DE_TU_BASE_DE_DATOS

Código: Seleccionar todo

#!/bin/bash

# Ruta y Archivo en la que se guarda el log de la operacion del backup.
logfile="/home/EL_USUARIO_DE_TU_HOSTING/copiadiaria/logs/log.txt"

# Ruta en la que guardar los backups
backup_dir="/home/EL_USUARIO_DE_TU_HOSTING/copiadiaria/archivos"

# Usuario y Password de la Base de Datos de la que queremos guardar una copia diaria
username="NOMBRE_DE_USUARIO_DE_TU_BASE_DE_DATOS"
password="PASSWORD_DEL_USUARIO_DE_TU_BASE_DE_DATOS"

# Nombre completo de la Base de Datos de la que queremos guardar una copia diaria
BBDD="NOMBRE_DE_TU_BASE_DE_DATOS"

# NO ES NECESARIO MODIFICAR NADA A PARTIR DE AQUI

# Mediante esta instruccion, generamos un nombre de fichero con el dia mes y ano del proceso de backup.
timeslot=`date +%d%m%y`

# Mediante esta instruccion, generamos una variable con la fecha y hora actual.
thisday=`date +%d-%m-%Y--%H:%M`

# Mediante esta variable definimos LA COPIA que fue creada 5 dias atras y que sera BORRADA.
timeslotbefore=`date --date='5 days ago' +%d%m%y`

# Creamos un nuevo log del proceso de backup
# (Descomentar la siguiente linea si queremos que se borre el archivo de log en cada backup).
# rm -f $logfile
touch $logfile

cd $backup_dir

echo "--------------------------------------------------------------------------------------" >> $logfile
echo "--------------------------------------------------------------------------------------" >> $logfile
echo "$thisday : Comienza el proceso de copia de seguridad de la base de datos: $BBDD en el archivo: mysql-$BBDD-$timeslot.sql.gz" >> $logfile

# Volcamos la base de datos en un fichero comprimido en formato sql.gz para ocupar lo mínimo.
# Se evita el problema con los caracteres raros tales como vocales acentuadas, letra egne, etc...
# El nombre del fichero resultante contiene el nombre de la base de datos y la fecha de la copia.
# De esta manera, cuando sea necesaria su restauracion sera mas sencillo de localizar.
mysqldump --user=$username --password=$password $BBDD --add-drop-table -Q | gzip > mysql-$BBDD-$timeslot.sql.gz

echo "$thisday : Backup completo en la base de datos: $BBDD en el archivo: mysql-$BBDD-$timeslot.sql.gz" >> $logfile
echo "$thisday : Se ha ELIMINADO por Obsoleto el archivo: mysql-$BBDD-$timeslotbefore.sql.gz" >> $logfile
echo "--------------------------------------------------------------------------------------" >> $logfile
echo "--------------------------------------------------------------------------------------" >> $logfile

# Borramos LA COPIA que fue creada 5 días atrás.
rm -f mysql-$BBDD-$timeslotbefore.sql.gz
4.- Una vez hechas las modificaciones en el archivo copia_diaria.sh lo debemos de subir a la carpeta copiadiaria del servidor (si usamos un cliente FTP debemos de seleccionar el modo ASCII) y una vez subido le deberemos asignar permisos (Atributos CHMOD) 755.
Las carpetas copiadiaria - archivos - logs también tienen que tener permisos (Atributos CHMOD) 755.

5.- Accedemos a Cron Job en nuestro Cpanel y creamos una tarea diaria con el comando:

/home/EL_USUARIO_DE_TU_HOSTING/copiadiaria/copia_diaria.sh

Imagen

Y listo, cuando llegue la hora programada podras verificar como en la ruta /home/EL_USUARIO_DE_TU_HOSTING/copiadiaria/archivos/ tienes disponibles tus copias diarias de respaldo.

IMPORTAR BASE DE DATOS A PARTIR DE UNA COPIA DE RESPALDO

Pasos a seguir:

1.- Crea una Base de Datos nueva y asigna un usuario con poderes de acceso desde tu Cpanel en la opción MySQL Bases de Datos.

2.- Edita con Notepad++ el archivo bigdump.php que encontraras en el archivo adjunto dentro de la carpeta importar_bd, editandolo previamente con los datos de la nueva base de datos creada.

// Database configuration

$db_server = 'localhost';
$db_name = 'NOMBRE_DE_TU_BASE_DE_DATOS';
$db_username = 'NOMBRE_DE_USUARIO_DE_TU_BASE_DE_DATOS';
$db_password = 'PASSWORD_DEL_USUARIO_DE_TU_BASE_DE_DATOS';


3.- Sube la carpeta importar_bd la cual incluye el archivo bigdump.php con las modificaciones ya realizadas, en la ruta /home/EL_USUARIO_DE_TU_HOSTING/public_html/

4.- Sube a la ruta /home/EL_USUARIO_DE_TU_HOSTING/public_html/importar_bd/ el archivo con extensión sql.gz que previamente te has descargado de una de las copias de respaldo realizadas a tu base de datos.

5.- Accede a través de tu navegador al enlace:

http://TU_DOMINO/importar_bd/bigdump.php

6.- Veras una opción donde aparece el nombre de tu BACKUP y al lado la opcion "Star Import", haz clic y se paciente, pues dependiendo del tamaño de la Base de Datos el proceso sera mas o menos rápido.
No lo interrumpas, déjalo acabar sin cerrar el navegador.

7.- Una vez concluido el proceso borra por completo la carpeta importar_bd del servidor.

Ya puedes verificar (desde phpMyAdmin por ejemplo) que los datos se han importado correctamente en la nueva Base de Datos.

Espero que este método os sirva de ayuda.

Saludos :cerveza:
Respaldo Auto Diario BD Mysql.rar
(11.67 KiB) Descargado 393 veces