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 |