Script php Backup MySQL

Iniciado por EuroHack, 23 Octubre 2009, 17:29 PM

0 Miembros y 1 Visitante están viendo este tema.

EuroHack

¿Alguien sabe un Script para hacer Backup de MySQL?

Estoy 3 días probando el siguiente script y no e conseguido que funcione, el servidor es linux.

<?
// Nombre del archivo de con el cual queremos que se guarde la base de datos
$filename = "fichero.sql"; 
// Cabeceras para forzar al navegador a guardar el archivo
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$filename");

$usuario="space_4134845";  // Usuario de la base de datos, un ejemplo podria ser 'root'
$passwd="*****";  // Contraseña asignada al usuario
$bd="space_4134845_Nuke";  // Nombre de la Base de Datos a exportar

// Funciones para exportar la base de datos
$executa = "/mysql/bin/mysqldump -u $usuario --password=$passwd --opt $bd";
system($executa, $resultado);

// Comprobar si se ha realizado bien, si no es así, mostrará un mensaje de error
if ($resultado) { echo "<H1>Error ejecutando comando: $executa</H1>\n"; }

?>


E estado siguiendo los pasos que me decían en http://www.forosdelweb.com/f86/script-php-backup-mysql-746295/#post3134722 pero no e conseguido hacerlo funcionar.


Script de
http://www.forosdelweb.com/wiki/PHP:%C2%BFC%C3%B3mo_exportar_mi_base_de_datos_a_un_archivo_%27archivo.sql%27%3F
Modulo = Hardware
1 Salu2 = Un Saludo
1 S2 = Un Saludo
GC = Gracias.

¿? = Pregunta, por ejemplo, como ¿? en vez de ¿Como...?

Red Mx

Pues puedes hacerlo de muchas formas yo por ejemplo tengo una carpeta reservada para esto.

Si tu server es linux y puedes programar un cron ya estas del otro lado


backupalldatabases.sh
Código (bash) [Seleccionar]
#!/bin/bash

# Ruta en la que se guarda el log de la operacion de backup.
logfile="/home/integra/public_html/ic/mysql.log"

# Ruta en la que guardar los backups
backup_dir="/home/integra/public_html/ic"

# Usuario de MySQL si es Cpanel tu usuario y contraseña de Cpanel
username="****"
password="**"

# Creamos un nuevo log del proceso de backup
rm -rf $logfile
touch $logfile

# Mediante esta instruccion, generamos un nombre de fichero con el dia y la hora del proceso de backup.
timeslot=`date +%Y%m%d_%H%M`

cd $backup_dir

# Iteramos a traves de la lista de bases de datos a la que el usuario tiene acceso.
  for BBDD in $( mysql -u $username --password=$password -h localhost -Bse 'show databases' ); do
        echo "Creando copia de seguridad de $BBDD"
       
        # Volcamos la base de datos en un fichero temporal
        mysqldump --user=$username --password=$password $BBDD > datos.sql
       
        # Y lo comprimimos en un tar.bz2 para ocupar lo mínimo. Util en bases de datos grandes.
        tar cvjf mysql-$BBDD-$timeslot.tar.bz2 *.sql
       
        # El nombre del fichero resultante contiene el nombre de la base de datos y la fecha de la copia.
        # De esta manera, cuando sea necesaria su restauracion sera mas sencillo de localizar.
       
        echo "Backup completo en la base de datos: $BBDD (mysql-$BBDD-$timeslot.tar.bz2)" >> $logfile
       
        # Borramos el fichero temporal
        rm datos.sql
  done
#-------------------------------------------------

#
# Finalmente podemos enviar un email con el log de acciones para tener controlado el proceso de copia
#
#cat $logfile|mail -s "Proceso Backup $HOSTNAME = MySQL" <tu@mail.com>


Asi te hara un backup de todas tus base de datos te las comprime y te las deja listas para usarse, en la tarea cron puedes configurar cada cuando y a que hora quieres que haga el backup.

las rutas que hay son de ejemplo que tengo con un cliente cámbialas por las tuyas
Desarrollar Malware Es Causa De Cancer...

EuroHack

Gracias, acabo de encontrar otro que esta bueno. = http://www.phpmybackuppro.net/opinion.php lo que no me gusta es que tengo que meter el mismo loguin que MySQL.

1 Salu2
Modulo = Hardware
1 Salu2 = Un Saludo
1 S2 = Un Saludo
GC = Gracias.

¿? = Pregunta, por ejemplo, como ¿? en vez de ¿Como...?

^Tifa^

Mysqldump hace backups logicos no fisicos. Con un script en crontab como te dice el amigo aca podrias hacer el dumpeo de las tablas (Que para mejor atomicidad es preferible bloquear las tablas en modo lectura, o pasarle los parametros correspondientes a mysqldump para que lo haga por ti... en este caso  --opt ) y para mayor rapidez de dumpeo, puedes desabilitar temporalmente las llaves he indices --disable-keys

Mi recomendacion de bloquear tablas ante lectura/escritura es por el mero hecho que utilizar mysqldump sin parametros, hara un backup logico de la estructura de las tablas bloqueando cada campo correspondiente por donde vaya mysqldump, digase, una tabla con los valores:

nombres char  --> (suponte que tienes 5,000 registros)
apellidos char --> (suponte que tienes 5,100 registros)

Ahora usas mysqldump sin parametros:

mysqldump bloquea a modo lectura/escritura (mientras va haciendo el dump) el campo :
nombres char

Sin embargo el campo (apellidos char) donde mysqldump aun no ha llegado (No llegara hasta que no termine de archivar los 5,000 registros del campo nombre) en el campo apellidos aun sigue vigente sin ningun tipo de bloqueos y cualquier usuario si tiene capacidad de realizar cualquier tipo de transaccion (UPDATE, INSERT, DELETE) en el campo apellidos, cuando mysqldump termine de archivar nombres, pasara a apellidos por ende desbloqueara el campo nombres y bloqueare el campo apellidos para realizar el mismo proceso, por lo tanto en lo que va archivando campo apellidos (que esta bloqueado vs escritura) cualquier dato puede ser insertado o actualizado en el campo 'nombres' y NO, estos ultimos datos no seran parte del backup que esta realizando mysqldump, ya mysqldump termino con el campo 'nombres' y no volvera para atras, por ende este tipo de backup puede quedar inconsistente (por falta de datos en tiempo real).

Pero si bloqueas las tablas antes de iniciar el dump, como no es posible escribir en ninguno de los campos de una tabla, todos los datos seran consistentes y actuales  ;)  Al menos que quieras hacer el backup de manera fisica con mysqlhotcopy pero eso ya es otra historia.

дٳŦ٭

No, no te va a salir si tu host tiene el safe mod prendido.. system().

Prueba lo que te dice mi amigo Rojo y Tifa. Saludos.


Con sangre andaluza :)


EuroHack

No me funciona el codigo que a puesto Red Mx.
Modulo = Hardware
1 Salu2 = Un Saludo
1 S2 = Un Saludo
GC = Gracias.

¿? = Pregunta, por ejemplo, como ¿? en vez de ¿Como...?

Red Mx

Cita de: EuroHack en  1 Noviembre 2009, 21:08 PM
No me funciona el codigo que a puesto Red Mx.

programaste el cron y vaya tiene permisos para ejecutar el archivo (CHMOD 777)  tienes las rutas correctamente?
Desarrollar Malware Es Causa De Cancer...

EuroHack

sitiene 777,lo de cron no se que es. pero los datos de login ya los e puesto.
Modulo = Hardware
1 Salu2 = Un Saludo
1 S2 = Un Saludo
GC = Gracias.

¿? = Pregunta, por ejemplo, como ¿? en vez de ¿Como...?

Red Mx

#8
Cita de: EuroHack en  2 Noviembre 2009, 11:32 AM
sitiene 777,lo de cron no se que es. pero los datos de login ya los e puesto.




Solo no funciona te lo aseguro.

En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o scripts a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab.

Cron se podría definir como el "equivalente" a Tareas Programadas de Windows.


Desde tu panel de control del hosting es muy sencillo

http://tu dominio:2082/frontend/x3/cron/index.html


http://www.google.com.mx/search?client=opera&rls=es-LA&q=Programar+Cron+Cpanel&sourceid=opera&ie=utf-8&oe=utf-8
Desarrollar Malware Es Causa De Cancer...

PussyLover

Cita de: EuroHack en 23 Octubre 2009, 18:54 PM
Gracias, acabo de encontrar otro que esta bueno. = http://www.phpmybackuppro.net/opinion.php lo que no me gusta es que tengo que meter el mismo loguin que MySQL.

1 Salu2

Acabo de probar tu solución, ya que andaba buscando algo parecido y es genial.

Muchisimas gracias por tu aporte.  ;-)