Realizar backup con mysqldump desde shell script de linux

Uno de los inconvenientes de realizar backup automáticos de las bases de datos, en un hosting compartido es cuando deshabilitan las funciones:

show_source, system, shell_exec, passthru, exec,  popen, proc_open, allow_url_fopen

Estas funciones de php nos permiten ejecutar comandos de linux, por ejemplo:

<?php
exec('mysqldump --user=... --password=... --host=... DB_NAME > /path/to/output/file.sql');
?>

Ahora estas funciones son deshabilitadas en los hosting por seguridad y muchas veces el proveedor de hosting no lo puede cambiar o no quiere cambiar.

Pues tras darle muchas vueltas y tratar de buscar un forma de como hacer estos backup encontré una forma, ejecutando script shell de linux, archivos con extensión .sh, estos archivos los ejecutamos creando una tarea programada en el cron jobs del cPanel.

Nuestro script seria /home/username/backup/backup.sh

#!/bin/bash
 
DB_BACKUP="/home/username/backup/data/`date +%Y-%m-%d`"
DB_NAME="db_name"
DB_FILE=$DB_BACKUP/$DB_NAME-`date +%Y-%m-%d-%H-%M-%S`.sql
DB_USER="db_username"
DB_PASSWD="xxxxxx"
 
# Creamos la carpeta
mkdir -p $DB_BACKUP
 
# Eliminamos los backups antiguos, quedando los backups de los 10 últimos días
find "/home/username/backup/data" -maxdepth 1 -type d -mtime +10 -exec rm -rf {} \;
 
# Realizamos el backup y lo comprimimos en .gz
mysqldump --user=$DB_USER --password=$DB_PASSWD --opt $DB_NAME > $DB_FILE
gzip $DB_FILE;

Nos generará un archivo

/home/username/backup/data/db_name-2014-09-01-22-38-04.sql.gz

En el cron job creamos una tarea que se ejecute cada día:

0 0 * * * sh /home/username/backup/backup.sh

Realizar backup con mysqldump desde shell script

Realizar backup con mysqldump desde shell script

Realizar backup con mysqldump desde shell script

(Visited 202 times, 1 visits today)
Puedes saltar al final y dejar una respuesta. Hacer ping no está permitido actualmente.