jueves, 17 de junio de 2010

Script PHP para hacer respaldo de nuestra Base de Datos

Cuando tenemos un WebSite dinámico o un sistema web usando base de datos, regularmente es recomendable hacer respaldos de la base de datos; eso a muchos de nosotros nos dá mucha pereza por lo que consiste en entrar al administrador de base de datos(PhpMyAdmin), pero no queda de otra que hacerlo por seguridad y prevención.
Es por ese motivo buscando en la red he logrado encontrar un Script PHP que automatiza todo el proceso, es decir, que puedes hacer el respaldo de tu PC con solamente un clic.
A continuación describo textualmente el funcionamiento del mismo, tomado de la página fuente.
1.- Su funcionamiento es simple:
  • Cada vez que se lanza el script, se crea el Dump de la Base de Datos completa.
  • El Dump se crea comprimido si el servidor tiene capacidad para ello.
  • El Dump se crea con el nombre de la base de datos y extensión ‘.gz’ o ‘.sql’ según tenga el server o no, capacidad de compresión, respectivamente.
  • El Dump creado se salva en la misma carpeta en que está el script.
  • El Dump puede descargarse del server al ordenador desde la misma ventana del navegador.
  • Cuando se lanza el script, no se obtiene el resultado en la ventana del navegador hasta que el dump finaliza. Eso significa que con una gran base de datos sin comprimir de 1000 Mb (1 Gb), por ejemplo, el resultado tardará en aparecer tres minutos aprox., dependiendo de la velocidad del server.
  • Cuando se lanza el script, no cerrar ni hacer nada con esa ventana del navegador, hasta que el script concluya y muestre el resultado.
2.- Restore la Base de Datos
  • Cada vez que se lanza el script, se borra la estructura de la base de datos y se restituye el contenido del dump que, con nombre igual al de la base de datos y extensión ‘.gz’ o ‘.sql’ según tenga el server o no, capacidad de compresión, respectivamente, está en la misma carpeta que el script.
  • Cuando se lanza el script, no se obtiene el resultado en la ventana del navegador hasta que el restore finaliza.
  • Cuando se lanza el script, no cerrar ni hacer nada con esa ventana del navegador, hasta que el script concluya y muestre el resultado.
  • Los scripts procesan query a query, lo que significa que da igual el tamaño de la base de datos a dumpear o restorear… que puede ser de gigas.
  • Los scripts dumpean o restorean la base de datos sin importar si ésta pertenece a un foro y qué tipo de foro, a un portal y qué tipo de portal, etc… en síntesis, los scripts son universales.
  • Se podría hacer más bonito y más complicado pero no merece la pena, de lo que se trata es de hacer el backup o restore de una base de datos en un simple click, no de hacer monadas.
    Distribuyo los scripts bajo los términos de la Licencia GNU de Documentación Libre (GFDL, GNU Free Documentation License).
Puedes descargarlo aquí: http://www.zoneartcss.com/wp-content/uploads/2010/03/dump_y_restore_db_1.1.1.zip
MI CODIGO:
Sin embargo mi necesidad es algo particular ya que tengo habilitado que se haga el respaldo de mi base de datos sin necesidad de apretar un botón, sino que lo haga de manera automática pero cargando una página web(esto es mi necesidad, la suya puede ser otra :)
He aquí el código que implementé:
$sql="SELECT MAX(fecha_usado) AS fecha_de_ayer FROM contacto;";
$res=mysql_query($sql);
$row=mysql_fetch_array($res);

$dia_respaldado=$row["fecha_de_ayer"];
$dia_respaldado=strftime("%Y-%m-%d",strtotime($dia_respaldado));

$FileName=$db."-".$dia_respaldado.".sql";
$backupRoute="/var/www/respaldo_db/";
$command = "mysqldump --opt --host='$localhost' --user='$user' --pass='$passwd' '$db' > ".$backupRoute.$FileName;
exec($command);

25 comentarios:

Anónimo dijo...

Gracias por compartir el Script.

Me funcionó muy bien.

Había estado intentando por un rato con ese script, pero había algo mal en mi sintaxis en la línea del $comand.

Gracias de nuevo.

Ing. Douglas Flores N. dijo...

No hay problema, estamos para ayudarnos, gracias por dejar tu comentario.

Saludos y que Dios te bendiga.

Anónimo dijo...

hola soy nuevo en servidores linux espero me sea de ayuda tu pagina gracias. saludos desde mexico

Anónimo dijo...

Esta muy bueno el script, muchas gracias!!!!

Kerwin Amaro dijo...

Este codigo puedo usarlo en windows??

Anónimo dijo...

gracias pana lo probe en linux y funciono perfectamente asiendo un par de modificaciones se convierte en multiplataforma

Grull. dijo...

buenos dias, descargue el script para realizar el respaldo de los datos pero soy muy nuevo en esto de php con mysql y no tengo idea de como hacerlo funcionar. sera que me explica

Anónimo dijo...

Eres una maquina tio, me has sido de muchisima ayuda!

Ing. Douglas Flores N. dijo...

A la orden amigo.

Saludos

Balaguero dijo...

El link a phpmyadmin esta roto.
Comento en modo de aviso.
Saludos Muy buena la web estoy probando la libreria de dumpdb

Ing. Douglas Flores N. dijo...

Listo ya está bien el link. corregido.

Saludos

David Reyes dijo...

Ummm, Me funciona a medias, me hace el respaldo pero cuando quiero restaurar la base de datos me da error y no se crea ninguna tabla! que estaré haciendo mal.

Anónimo dijo...

oye esta bueno el codigo pero deberias de explicarlo un poco y asi exclaser dudas

Anónimo dijo...

Hola muy bueno el codigo. Quisiera que al ingresar a la pagina PHP no pida usuario ni contraseña. Podrias indicarme que tengo que modificar en el codigo para ello.
Muchas Gracias !!!

Katherine Contreras dijo...

hola me llamo yessica soy estudiante de ing en informatica y quisiera saber como para respaldar y restaurar mi bd y tengo q tener un boton q sea visible en mi sistema para q el usuario lo pueda hacer

Anónimo dijo...

Estimado muy buen aporte pero tengo un problema con el archivo restore_db.php al intentar restaurar la BD, me da el siguiente error:
- Error en statement: CREATE TABLE `aestado` (
- Query: CREATE TABLE `aestado` (
- MySQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


No entiendo el porque, ya que al ejecutarlo directamente en mysql no presenta ningun error.
Te agradeceria bastanate si me pudieras ayudar. De ante mano muchas gracias.

Anónimo dijo...

buen día, se que mi pregunta no tiene nada que ver con el tema tratado.
será que sabrá cómo pasar mi sistema web a un cd auto run, es decir donde el usuario puede insertar el cd y automáticamente los archivos se guarden en la carpeta específica

Douglas J. Flores Nicaragua dijo...

Hola pues, no tiene nada que ver el sistema Web con un sistema AutoRun, estos sistemas son software que no necesitan de un servicio como Apache o un servidor web para correr, y todas las librerías te caben en un CD, mientras que un sistema Web creado con lenguaje de probramación PHP, ASP, Perl (o cualquier otro) necesita de todas las bondades del propio servidor, así como también de un gestor de base de datos (en su caso). Por lo que no es posible guardarlo en un CD.

Espero haber respondido a tu pregunta, cualquier cosa, quedo a tus servicios.

Saludos fraternos

Roxana Gomez dijo...

Gracias por compartir el codigo! ha funcionado perfectamente! Saludos

Douglas J. Flores Nicaragua dijo...

a la orden Roxana! Saludos

Miguelangel Gutierrez dijo...

buenas hermano agradecido por su post. pero tengo un error el el archivo dump_db.php me genera esto:
Base de Datos: 'inventario' en 'localhost'.

- Ya que está disponible Zlib, salvaré la Base de Datos comprimida, como 'inventario.sql.gz'

- He establecido conexion con la Base de datos.

Deprecated: Function mysql_list_tables() is deprecated in /opt/lampp/htdocs/p/dump_db.php on line 372

Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /opt/lampp/htdocs/p/dump_db.php on line 215

Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /opt/lampp/htdocs/p/dump_db.php on line 215

Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /opt/lampp/htdocs/p/dump_db.php on line 215

- He salvado las 17 tablas en 0 minutos y 1 segundos.

- El Dump de la Base de Datos está completo.
- He salvado la Base de Datos en: /p/inventario.sql.gz

y me crea el respaldo pero cuando pero cuando lo voy a importar en el phpmyadmin me edad error y cuando uso el otro archivo el de restore. dice que no puede eliminar una de mis tabla que estoy haciendo mal =(

Anónimo dijo...

Hola a todos a mi me sirvió el código pero tenia 4 funciones desactualizadas, las e actualizado y subido para que ustedes lo puedan utilizar ;) saludos

https://mega.co.nz/#!xhBn2CjI!TjUpdL3vPoRcwUSPchN5dWLki3e9wMMUYOh6KV6Cen8

pedro batista dijo...

mil gracias hermano estaba desde hace rato averiguando como hacer el respaldo de la DB y nada y en tu post todo salio bien

Juandev dijo...

hola podrian subir de nuev el archivo
el link ya no descarga nada y de verdad lo necesito!!! saludos!!

jason gardener dijo...

Ese link de Mega esta Cifrado, se necesita el codigo de cifrado para poder descargar.. Me los podrias Facilitar amigo..??