Foros del Web » Programando para Internet » PHP »

Problema con la copia de seguridad

Estas en el tema de Problema con la copia de seguridad en el foro de PHP en Foros del Web. Hola amigos, primero felicitaros por esta comunidad tan buena que ha sido una visita constante durante el desarrollo de mi proyecto. Siempre os he leído ...
  #1 (permalink)  
Antiguo 01/08/2009, 16:37
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 14 años, 8 meses
Puntos: 12
Problema con la copia de seguridad

Hola amigos, primero felicitaros por esta comunidad tan buena que ha sido una visita constante durante el desarrollo de mi proyecto. Siempre os he leído y nunca he preguntado porque siempre he encontrado las respuestas que buscaba en este foro, hasta ahora.

La cuestión es que he diseñado una aplicación web tipo apache-php-mysql donde el punto más fuerte es la base de datos, motivo por el cual es necesario hacer una copia de seguridad periódica.

Tengo contratado un servidor virtual en el que corre un sistema operativo de linux. Por lo que mi idea era crear un script y llamarlo cada día con crontab sobre las 4 de la mañana (hora de menos actividad) para hacer la copia de seguridad de la base de datos.

Después de mucho, mucho buscar encontré un script que me corre a la perfección en mi servidor local (mi máquina tiene instalado un windows xp).

Aquí les pego el código:

Código PHP:
$serv="XXXX"//nombre del servidor
$bd="XXXX";  //nombre de la base de datos
$usr="XXXX"//usuario para conectarse a la base de datos
$pwd="XXXX"//password del usuario
$mysqldump='"C:\xampp\mysql\bin\mysqldump.exe"';
//el nombre del backup llevara la fecha y hora del servidor:
$nombre_back "juego2_";
$nombre_back .= date("d-n-Y_h-i");

passthru("$mysqldump $bd -h $serv -u $usr -p$pwd > C:/xampp/htdocs/".$nombre_back.".sql"$error); 
El problema está en que al cambiar cuatro parámetros para subirlo al servidor el script no me hace nada y cuando le digo que me imprima el error de la función passthru me dice 127. He buscado por todos lados el error pero no encuentro nada, he probado otros scripts que he encontrado y he intentado comprender qué es lo que no me está funcionando bien pero parece que es algo que me supera.

Aquí les dejo el código que subo a la web para hacer la copia de seguridad:

Código PHP:
$serv="XXXX"//nombre del servidor
$bd="XXXXX";  //nombre de la base de datos
$usr="XXXXX"//usuario para conectarse a la base de datos
$pwd="XXXXXXXX"//password del usuario
$mysqldump='"/var/lib/mysql/mysqldump"'//<- creo que esta es la ruta correcta
//el nombre del backup llevara la fecha y hora del servidor:
$nombre_back "juego2_";
$nombre_back .= date("d-n-Y_h-i");

passthru("$mysqldump $bd -h $serv -u $usr -p$pwd > XXXX/bakap/".$nombre_back.".sql"$error);

echo 
$error//<- aquí me imprime 127 
Intuyo que el error puede estar en tres puntos:
1- no estoy utilizando bien la función passthru (ya probé con exec y system y nada)
2- no le estoy dando la ruta correcta a mysqldump
3- no le estoy dando la ruta correcta donde guardar el archivo

Pero puede que también esté equivocado.
Siento haber hecho un tema tan largo. Muchas gracias por adelantado.

He escrito este tema en el foro de mysql pero me han dicho que lo ponga aquí en php espero que me puedan ayudar.
  #2 (permalink)  
Antiguo 01/08/2009, 20:45
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con la copia de seguridad

Hola , te dejo 3 links de clases ya diseñadas y que quizas te sean mas faciles de implementar e incluso mas seguras:

http://www.fluffycat.com/SQL/MySQL-D...ckup-With-PHP/

http://www.0php.com/MySQL-Backup.php

http://www.phpclasses.org/browse/package/3049.html

Saludos!
  #3 (permalink)  
Antiguo 02/08/2009, 04:11
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 14 años, 8 meses
Puntos: 12
Respuesta: Problema con la copia de seguridad

Ya me he mirado lo que me has puesto, menos la que me tengo que registrar, no me gusta ir registrándome por internet, sobre todo cuando de una página sólo me interesa una cosa pequeña y concreta.

Te agradezco mucho la aportación, pero no me sirven. Para empezar el primer código lo veo excesivamente bruto, seleccionar tabla por tabla y luego crear un archivo con todos los inserts. ¿Para qué hacer eso cuando en msyql existen dos funciones que hacen copia de seguridad automática? ¿No será mejor utilizar siempre las funciones que fueron predefinidas para esa tarea concreta?
Esas dos funciones se llaman mysqldump y mysqlhotcopy.

La cuestión no es optar por otras maneras de hacer la copia de seguridad, como ya comento arriba, en mi ordenador local el script que es muy sencillo corre muy bien y me hace la copia en muy pocos segundos. Lo que quiero saber es porqué no me anda en el servidor virtual.
  #4 (permalink)  
Antiguo 02/08/2009, 07:05
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con la copia de seguridad

El error de 127 puede ser un problema con la ruta.

yo sugiero que estes seguro de dos puntos.

1- Que cuentas con permisos para ejecutar mysqldump.
2- Que la ruta que le estas pasando sea la correcta.

Encontre estas recomendaciones en
http://www.php.net/manual/fr/function.passthru.php


Cita:
If you have chrooted apache and php, you will also want to put /bin/sh into the chrooted environment. Otherwise, the exec() or passthru() will not function properly, and will produce error code 127, file not found.
Cita:
I had an issue when i used exec

I think we were echoing information on the test.php script.
for eg: when we tried

exec(php test.php,$array,$error);

the return was 127 and the code was failing.

checking the note on this page gave us a hint to use passthru instead.
The only thing to note is that you need to provide the fuull path.

now our command became

passthru(/bin/php /pathtotest/test.php,$array,$error);

this works.

yipeee!!!!!

Cita:
Zak Estrada
14-Dec-2004 11:21
Remember to use the full path (IE '/usr/local/bin/foo' instead of 'foo') when using passthru, otherwise you'll get an exit code of 127 (command not found).

Remember, you'll also get this error if your file does not have executable permission.
Espero que te sirvan.
  #5 (permalink)  
Antiguo 02/08/2009, 09:01
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 14 años, 8 meses
Puntos: 12
Respuesta: Problema con la copia de seguridad

He estado mirando el archivo php.ini de mi servidor y he buscado si las funciones estaban deshabilitadas, leí por ahí que había que buscar la línea

Código:
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions = system,passthru,exec,popen,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec
cosa que en mi servidor está así.

Código:
; This directive allows you to disable certain functions for security reasons.
; It receives a comma-delimited list of function names. This directive is
; *NOT* affected by whether Safe Mode is turned On or Off.
disable_functions =
Por lo que supongo que sí que debo de tener los permisos. Estoy mirando el tema de la ruta, creo que es ahí donde tengo los problemas. A ver si con eso que me has puesto puedo solucionarlo y os pongo la solución al problema.

Muchas gracias por la ayuda gjx2.
  #6 (permalink)  
Antiguo 02/08/2009, 10:00
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con la copia de seguridad

Estimado morior si tienes un servidor virtual alquilado , no posee un soft de panel de control y desde ahi configuras el regimen de backups y listo? o podes pedirle al area tecnica que te instale un sistema de backups más eficiente que un script php , algo en perl seria mas rapido incluso.

Pensa que si tu tabla en algún punto aumenta de tamaño y se vuelve realmente grande , al procesarla con php consumiras muchsimos recursos sin sentido y pondras al limite tu servidor ante cada backup , lo más logico y sensato es si es un servidor virtual y tenes acceso via ssh y si podes ejecutar ficheros bash es crear un .sh que se ecarga del backup y configurarlo con un crontab , es mi humilde opinion , trabaje en una empresa cno una base de datos que pesaba 400 mb comprimida , asi que era realmente grande y lo haciamos asi y tardabamos nada , con un php moriamos en el intento por el tiempo de ejecución y además el consumo de recursos , era un quad core con 8 gb , y era dedicado a nosotros , con eso te digo todo.

Saludos
  #7 (permalink)  
Antiguo 02/08/2009, 13:54
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 14 años, 8 meses
Puntos: 12
Respuesta: Problema con la copia de seguridad

Pues sí, es un comentario muy interesante y al ser un servidor virtual tengo acceso como bien dices a SSH, el acceso a bash no sé lo que es (soy nuevo en esto de la programación) pero me lo voy a mirar, porque, como bien comentas, lo esperado es que esa base de datos que tengo en el servidor aumente y aumente mucho con el tiempo.

Miraré por ahí a ver si me puedo informar bien de cómo crear ése archivo de respaldo .sh aunque no tengo ni idea de qué se trata, mi especialidad es simplemente php, mysql y justito que ando.

Y si alguien me puede ayudar a encontrar algo que sea en .sh como comentas pues le estaré agradecido.

Un saludo y muchas gracias por la atención.
  #8 (permalink)  
Antiguo 02/08/2009, 16:49
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con la copia de seguridad

Acá te dejo un par de links:

http://www.vensign.com/linux/hacer-u...cron-en-linux/

http://blog.tydnet.org/?p=32

Saludos!
  #9 (permalink)  
Antiguo 03/08/2009, 04:25
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 14 años, 8 meses
Puntos: 12
Respuesta: Problema con la copia de seguridad

Las soluciones que me propones utilizan mysqldump que, por lo que he leído no es una función de php sino una función especial de mysql pensada para hacer copias de seguridad, por lo que vuelvo a los inicios. ¿No será mejor siempre trabajar con funciones propias de mysql para hacer copias de seguridad?

En éste caso, dónde tengo el error al crear el archivo. Sigo pensando que es la ruta que no es la correcta. En cuanto consiga algo lo solucionaré. (que conste que he probado TODO lo que me habéis estado poniendo y por lo que sea no me ha funcionado absolutamente nada).

Si encuentro la solución al problema la pondré aquí. A, y un apunte, me parece muy curioso que un tema tan vital de cómo hacer copias de seguridad de bases de datos no tenga una documentación larga, extensa y fiable, porque os aseguro que he buscado y rebuscado y todos los scripts/ comentarios están repetidos y parecen sacados de dos o tres modelos diferentes simplemente.
  #10 (permalink)  
Antiguo 03/08/2009, 08:52
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con la copia de seguridad

Estimado morior , mysqldump es un ejecutable de linux o windows , de acuerdo a tu plataforma que es del paquete mysql , no es un comando de php , fijate que tu script hace una llamada a dicho ejecutable , yo lo que te indicaba era para eliminar la etapa php y asegurar un exitoso backup.

Respecto de la falta de documentación no es como dices tu , hay muchisima información por todos lados.

Saludos
  #11 (permalink)  
Antiguo 04/08/2009, 06:34
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 14 años, 8 meses
Puntos: 12
Respuesta: Problema con la copia de seguridad

Hola jonatanc, yo creo que mysqldump y mysqlhotcopy son funciones propias de mysql motivo por el cual están en su página del manual de referencia y, por favor, haz el favor de leerme bien porque yo nunca he dicho que eso sean funciones de php, todo lo contrario, he dicho que NO lo son.

Respecto al tema de la documentación, te aseguro que la veo muy pero que muy pobre, tan pobre como que nadie es capaz de decirme porqué no puedo hacer un simple backup de una base de datos. Te aseguro que no soy una persona que se rinde a la primera de cambio, siempre pruebo y pruebo TODO lo que encuentro por ahí e intento comprenderlo para aprender. La prueba está en que sin ser programador he conseguido cosas que hasta algunos programadores les costaría hacer.

Y los ejemplos/scripts para hacer copias de seguridad los encuetro repetidos una y otra vez y, tras intentarlo numerosas veces, siguen sin funcionar. No dudo que me falten muchos conocimientos de programación puesto que, como ya he dicho, no soy programador y no dudo que sea ése el verdadero problema que me impide hacer bien las copias de seguridad.

Ése es el motivo y no otro, por el que acudo a vuestra comunidad de expertos, para que me ayudéis, si es posible, a solucionar este problema
  #12 (permalink)  
Antiguo 04/08/2009, 06:57
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con la copia de seguridad

Hola morior,
Aqui te dejos unos links donde hablan sobre como hacer copias de seguridad , espero que puedas ir viendo algunas opciones y adapte tu codigo ala que mas te guste.

http://magarto.com/blog/archivo/2007...de-tu-hosting/

http://www.keopx.net/base-de-datos/h...icas-con-cron/

http://www.keopx.net/tag/mysql/

http://www.keopx.net/base-de-datos/i...ndes-de-mysql/

http://www.vensign.com/linux/hacer-u...cron-en-linux/

http://blog.controlzeta.net/?tag=crontab

http://geoks.com.ar/blog/archives/Ge...-mysql-via-ssh

http://www.islabit.com/4896/10-maner...-de-mysql.html

http://lecciones.batiburrillo.net/20...os-con-ssh.htm

http://blog.tydnet.org/?p=32

http://tuxedlinux.wordpress.com/2007...e-datos-mysql/

http://elrincondetolgalen.wordpress....con-mysqldump/

http://www.forosdelweb.com/f86/gener...te-ssh-641061/

Aunque sigo pensando que es la ruta la que tiene el error .
Suerte amigo.
  #13 (permalink)  
Antiguo 04/08/2009, 07:15
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con la copia de seguridad

Tambien puedes comprobar la ruta en caso de no existir crearla haciendo uso de las funciones.

is_dir y mkdir

http://www.php.net/mk_dir

http://www.php.net/is_dir
  #14 (permalink)  
Antiguo 04/08/2009, 08:19
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con la copia de seguridad

Me referia a la invocación con passthru , que ai esta el punto donde el sistema baja de rendimiento en forma considerable , ya que mediante php invocas el ejecutable mysqldump o cual fuese , por eso te recomende lo de sh y vuelvo a repetir creeme que hay mucha documentación , muchos foros de linux y gente mas capacida que cualquier que nosotros , un simple hecho son las listas tecnicas de solar (Asociación de Software Libre Argentina) , o de Lanux (Grupo de usuarios de linux de lanús).

Y pues como te ha puesto gjx2 , fijate todos los links que hay e información , un consejo de alguien que quizas tiene más tiempo que tu y no por descriminar o menospreciar tu trabajo , la información repetida increiblemente suma , debido a que siempre hay algún comentario o forma distinta que puede servir a la calidad global del progama.

"..
La prueba está en que sin ser programador he conseguido cosas que hasta algunos programadores les costaría hacer..."

Yo creo que a ningún analista ni ingeniero le costaria hacer una copia de seguridad y nos pasaria el trapo a vos ,a mi y a muchos de aqui.

La humildad y sinceridad es la base fundamental de cualquier persona....

Saludos!

Última edición por jonatanc; 04/08/2009 a las 08:31
  #15 (permalink)  
Antiguo 04/08/2009, 16:21
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 14 años, 8 meses
Puntos: 12
Respuesta: Problema con la copia de seguridad

Gracias gjx2 me miraré toda esa documentación que has puesto ahí a ver si consigo dar con el problema. A ver si lo soluciono de una vez y doy con la respuesta correcta.

Y jonatanc, soy periodista y si de una cosa sé es citar. No me cites a medias porque sacas las cosas de contexto.

"No dudo que me falten muchos conocimientos de programación puesto que, como ya he dicho, no soy programador y no dudo que sea ése el verdadero problema que me impide hacer bien las copias de seguridad"

Creo que ahí dejo muy clara donde está mi humildad.

Saludos y muchas gracias por la atención.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:37.