Autor Tema: Copias de seguridad para bases de datos MySQL con PHP  (Leído 16809 veces)

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

Desconectado kerberoz

  • The Communiter-
  • *
  • Mensajes: 3713
Copias de seguridad para bases de datos MySQL con PHP
« : agosto 10, 2006, 11:17:05 pm »
Ultimamente he estado trabajanco con MySQL y PHP. Me toco hacer una rutina para respaldar bases de datos con mysql.

Les pongo el codigo, kizas a mas de alguno le va ha servir. Este codigo no solo funciona con PHP, lo pueden usar con otros lenguajes de programacion.

Crear la copia de la base de datos en PHP
Código: [Seleccionar]
<?php
    shell_exec
('mysqldump --host=nombre_del_server --user=usuario --password=la_clave   nombre_base_de_datos > cualquier/directorio/nombre_base_de_datos.sql');
?>

Si no ponen la ruta donde kieren guardar el archivo sql, este se guardará en la carpeta donde se encuentra el script.

Deben tener permisos de escritura para la carpeta donde se guardara la copia de la base de datos.

Tambien deben tener permisos de ejecución para cmd.exe, si usan windows.

Si estan usando linux con Apache deben dar permisos para que Apache pueda ejecutar el comando mysqldump.

Crear la copia de la base de datos en el shell de mysql.

Código: [Seleccionar]
c:\mysqldump -h=nombre_del_server -u=usuario -pla_clave nombre_base_de_datos > cualquier/directorio/nombre_base_de_datos.sql;
Para restaurar la copia de seguridad con PHP
Código: [Seleccionar]
<?php
    shell_exec
('mysql --host=nombre_del_server --user=usuario --password=la_clave   nombre_base_de_datos < cualquier/directorio/nombre_base_de_datos.sql');
?>


Claro que antes de restaurar la base de datos deben crearla, pueden hacerlo con el shell de mysql. Para ejecutar el comando en PHP deben usar shell_exec() o system() y tambien deben colocar los datos del usuario y el servidor.
Código: [Seleccionar]
mysql> mysqladmin  create nombre_base_de_datos
El aguinaldo es un invento comunista; pero eso no te molesta, ¿Verdad?

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6531
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #1 : agosto 11, 2006, 08:16:50 am »
Buen Script, basico y funcional  :mosh: , una cosita que tal vez le quieran agregar (para los que usan linux) es que te lo recoga otro servidor para que el backup no este ahi , esto te sale bien para cuando y son backups grandes y descargarlos personalmente se vuelve tedioso. Podes agregarle al final del que respalda algo asi como.

Código: [Seleccionar]
<?
/* lynx es un mini navegador de los nix
 * xxx.xxx.xxx.xxx es la direccion de otro server que recibira el backup
 */
exec("/usr/bin/lynx http://xxx.xxx.xxx.xxx/backups/mysql_backup_grabber.php");
?>

<?PHP
/* Codigo de mysql grabber
 * $day es una representacion numerica del dai de la semana
 * copy se encarga de copiar el archivo, podriamos reemplazarlo por una ejecucion de wget en linux
 */
$day = date('w');
copy("http://yyy.yyy.yyy.yyy/cualquier/directorio/nombre_base_de_datos.sql", $_SERVER['DOCUMENT_ROOT']."/backups/backup_$day.sql");
?>

Y algo mas que tambien te puede servir es agregarle que lo haga gzipped para que reduzca considerablemente el tamaño del archivo y es simplemente con cambiar de

Código: [Seleccionar]
shell_exec('mysqldump --host=nombre_del_server --user=usuario --password=la_clave   nombre_base_de_datos > cualquier/directorio/nombre_base_de_datos.sql');
A

Código: [Seleccionar]
shell_exec('mysqldump --host=nombre_del_server --user=usuario --password=la_clave   nombre_base_de_datos | gzip > cualquier/directorio/nombre_base_de_datos.sql.gz');
De nuevo gracias por el aporte siempre es bueno agregarle una manera de hacer respaldos a los sistemas  :thumbsup:
« Última Modificación: agosto 11, 2006, 08:18:48 am por rdoggsv »

Desconectado sortux

  • -^- Elite Silver -^-
  • Sv Full Member
  • *
  • Mensajes: 854
  • Si kieres Paz, prepárate para la Guerra!!!
    • \"
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #2 : agosto 11, 2006, 09:23:51 am »
sencillo y funcional, buen aporte!! :thx: a probar!!!
There are only 10 types people in the world: Those who understand binary and those who don't

[img alt="some alt text"]http://ubuntucounter.geekosophical.net/img/ubuntu-user2.php?user=4815

Desconectado kerberoz

  • The Communiter-
  • *
  • Mensajes: 3713
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #3 : agosto 11, 2006, 03:26:31 pm »
Si es cierto, se me olvido lo del gzip, bueno yo lo estaba usando en windows y ahi no furula el gzip :blackeye:.

Me queda la duda si gzip es solo para linux o tambien se puede usar en windows, segun lo poco ke pude leer me da la impresion que solo funciona en sistemas Unix.
El aguinaldo es un invento comunista; pero eso no te molesta, ¿Verdad?

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #4 : noviembre 10, 2006, 02:23:12 pm »
Es exactamente lo que estaba buscando  :yahoo:

Iba a poner un tema preguntado eso, pero primero me puse buscar  :read: gracias por el aportaso  :sur:

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #5 : noviembre 16, 2006, 01:00:05 pm »
tengo un problema con este script, me crea el archivo .SQL pero este no contiene nada  :unsure: lo raro es que php no me da ningun error, fui a ver el log de los errores de apache y encontre esto
Código: [Seleccionar]
"mysqldump" no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable.
alguien me puede ayudar a corregir este problema  ;)

Desconectado Trance

  • Sv Vampire Team ® Founder
  • The Communiter-
  • *****
  • Mensajes: 1655
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #6 : noviembre 16, 2006, 02:26:20 pm »
mira esto
Código: [Seleccionar]
http://www.programacion.com/blogs/15_maelmori/archive/316_rutas_con_espacios_php_y_mysqldump_bajo_windows.html

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #7 : noviembre 16, 2006, 02:32:49 pm »
Gracias men voy a probar y luego les cuento  :thumbsup:

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Copias de seguridad para bases de datos MySQL con PHP
« Respuesta #8 : noviembre 18, 2006, 04:51:43 pm »
Gracias trance  :thumbsup: si me funciono, aki esta como lo hice  :yahoo:

Para hacer el Backup
Código: [Seleccionar]
<?
$serv=""; //nombre del servidor
$bd="";  //nombre de la base de datos
$usr=""; //usuario para conectarse a la base de datos
$pwd=""; //password del usuario
//hay que poner la ruta exacta en la que se encuentra el archivo mysqldump
//en mi caso es asi, primero va entre comillas simples y después se ponen comillas dobles.
$mysqldump='"C:/Archivos de programa/MySQL/MySQL Server 5.0/bin/mysqldump.exe"';
//el nombre del backup llevara la fecha y hora del servidor:
$nombre_back=date("dnY-h_i_s");

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

?>

Para restaurar el Backup

Código: [Seleccionar]
<?
$serv=""; //nombre del servidor
$bd="";  //nombre de la base de datos
$usr=""; //usuario para conectarse a la base de datos
$pwd=""; //password del usuario
//hay que poner la ruta exacta en la que se encuentra el archivo mysql
//en mi caso es asi, primero va entre comillas simples y después se ponen comillas dobles.
$mysql='"C:/Archivos de programa/MySQL/MySQL Server 5.0/bin/mysql.exe"';

passthru("$mysql $bd -h $serv -u $usr -p$pwd < nombre_back.sql");

?>