Backup de bases de datos MySQL remotamente

Hace poco dando de alta un nuevo hosting (no dedicado) el cual incluia bases de datos me encontré que el servicio que voy a montar es bastante crítico.

Aunque de momento es un experimento y seguramente acabe por ampliar los servicios en un futuro me encontré que el ISP no deja claro si realiza backups diarios de toda la información por mucho que la información esté en RAID. El problema no solo es que falle la BBDD, sino que se pueda manipular y acabe fallando por todos lados y no se pueda volver atrás con facilidad.

Estuve buscando formas de realizar backups automatizados de las bases de datos desde el propio servidor.
Encontré una herramienta basada en PHP que funciona genial y encima es gratuita.
http://www.phpmybackuppro.net/

Es una aplicación muy sencilla escrita en PHP y que se ha de instalar en un servidor web con PHP acceso a MySQL evidentemente. El hosting donde tengo la página web y dispone de todos estos requisitos, pero solo tiene un inconveniente. No tengo acceso al CRON para programar las tareas de copia.

Para ello me monté una máquina virtual con un Ubuntu Server en modo consola en mi ESXi. Instalé los servicios básicos LAMP y descomprimí en un directorio del servidor web «phpMyBackuppro». También decidí instalar suPHP para poder ejecutar los scripts PHP desde consola.

(Nota: Si en el caso de que en el ISP no tengas acceso a root y te den acceso a las BBDD individualmente como a mí, tendrás que crear una instalación por BBDD que tengas.)

Una vez descomprimido el archivo que hemos descargado iniciamos el programa a través de nuestro navegador.
La primera vez hasta que no introduzcamos los datos no nos pedirá usuario, pero una vez introducidos nos saldrá siempre una pantalla solicitandonos los datos. Antes de nada habría que dar acceso 777 al archivo global_conf.php y el directorio export.

La interfaz es muy sencilla.
En la parte superior se puede observar unas pestañas en las cuales podemos ver las diferentes opciones y datos a introducir con los datos de nuestro ISP como el nombre del host, el nombre de la base de datos o incluso si queremos transferir la bbdd una vez descargada a un ftp privado que tengamos o que nos la envíe por correo si esta ocupa poco. Esta última opción no la recomiendo si la bbdd puede crecer mucho, ya que los proveedores de correo normalmente no están preparados para recibir correos muy grandes.
También tenemos la opción de decirle cuantas copias queremos que nos conserve. Yo por ser previsor le voy a decir que me guarde las copias de 30 días (opción «delete local backups after x days:»).
En la pestaña backup podemos realizar un backup de forma manual. Podemos guardar la bbdd tanto en formato original, ZIP o GZ (si tenemos habilitado Gzip en nuestro servidor). Si nuestras bbdd crecen mucho recomiendo comprimirlas.
En la pestaña import podremos subir automáticamente a nuestro hosting una bbdd anterior. Si son muy grandes los ISP’s tienen por defecto limitado el tamaño, con lo cual recomiendo usar la opción «fragmented».

Después de esta breve introducción al entorno de phpMyBackupPro y ver lo sencillo que resulta vamos a ver la parte de como automatizar las copias de seguridad.

Si en nuestro servidor contratado tuviesemos acceso a CRON y SSH sería mucho más sencillo, con ir a la pestaña Schedule Backup sería tan facil como indicar los periodios de ejecución, seleccionar las BBDD y donde está nuestra carpeta export (o donde queremos que se guarden los archivos).
En caso de que no tengamos acceso. Utilizaremos nuestra máquina virtual para ejecutar la anterior pestaña Backup pero en modo consola.
Para ello nos crearemos un pequeño archivo .sh con las diferentes bbdd que queramos guardar. Recordad que si tenemos acceso a root solo bastaría con una linea, pero al tener acceso individual hará falta una linea por bbdd.
En la imagen podemos ver diferentes números al final. Segun la documentación son las opciones necesarias para que se cree el backup. El último número concretamente es para que se comprima. (La compresión por eso no la hace al máximo, no he sabido porque).
Le damos los permisos correspondientes al archivo .sh y ejecutamos crontab -e con el usuario que ejecutaremos el script.
En mi caso lo he programado para que se realice cada día a las 7 de la mañana y a las 7 de la tarde.
Si todo ha funcionado bien, deberiamos empezar a ver como se van realizando los backups.