Tag: backup - Webeame Snippets


Añadir snippet

Tag: backup



Hacer backup de MySQL desde un script en PHP

Visto en http://www.leemiblog.com/Articulos/Programacion/Hacer-backup-de-MySQL-desde-un-script-en-PHP.html
  1. <?php
  2.  
  3. // Añade tu codigo de autentificación aquí, etc.
  4.  
  5. // ¿ Donde se almacena la copia? Debe ser escribible por el servidor web
  6. // y estar fuera del directorio raiz de la web, para que nadie pueda
  7. // bajarse tu BD desde su navegador
  8. define('BACKUPDIR', '/var/www/privatedata/');
  9.  
  10. // para crear enlaces a esta pagina ( accion del formulario, etc.)
  11. define('THISPAGE', $_SERVER['PHP_SELF']);
  12.  
  13. /**** ALGUNAS FUNCIONES ****/
  14. function doHeader($title) {
  15. // crea una encabezado de página sencillo.
  16. ?><html><head><title>
  17. <?php echo $title;?></title></head><body><?php
  18. }
  19.  
  20. function doFooter() {
  21. // crea un pie de página sencillo
  22. ?></body></html><?php
  23. }
  24.  
  25. // si la variable filename en POST no está vacia, es que se ha enviado
  26. // el formulario
  27. if (!empty($_POST['filename'])) {
  28. // ahora validaremos y verificaremos las entradas
  29. // para saber lo que tenemos y abortar si hay algo mal
  30. $errors = array();
  31. $n = 0;
  32. /* pondremos cualquier error dentro de este array, y al final
  33. los listaremos todos para que los vea el usuario
  34. y pueda corregirlos */
  35. if (empty($_POST['filename'])) { // no hay nombre de fichero
  36. $errors[$n] = "Debe introducir un nombre de fichero.";
  37. $n++;
  38. }
  39.  
  40. if (empty($_POST['mysqluser'])) { // no hay usuario MySQL
  41. $errors[$n] = "Debe introducir un nombre de usuario MySQL.";
  42. $n++;
  43. }
  44.  
  45. if (empty($_POST['mysqlpass'])) { // no hay password MySQL
  46. $errors[$n] = "Debe introducir un password MySQL .";
  47. $n++;
  48. }
  49.  
  50. // Ha seleccionado copiar una BD, pero no han dicho cual
  51. if ($_POST['backupall'] == 'false' AND
  52. empty($_POST['backupwhichdb'])) {
  53. $errors[$n] = "Has selecciona copiar una base de datos, ".
  54. "pero no especificaste cual.";
  55. $n++;
  56. }
  57.  
  58. if ($n > 0) { // Si hubo errores en la fase de validacion...
  59. // muestra una pagina de error
  60. doHeader('Remote Database Backup');
  61.  
  62. ?><h1>Remote Database Backup</h1>
  63. <h2>No se pudo realizar la copia.</h2>
  64. <ul>
  65. // recorre los errores
  66. <?php foreach ($errors as $err) {
  67. ?><li>
  68. <?php echo $err; // y muestra su texto ?>
  69. </li><?php
  70. }
  71. ?>
  72. </ul>
  73.  
  74. <a href="<?php echo THISPAGE;?>">
  75. Volver al formulario de Backup</a>
  76. <?php
  77.  
  78. doFooter();
  79.  
  80. die(); // sale del script
  81. }
  82.  
  83. // Si estamos aqui, es que se ha acabado bien la validación
  84. // hacemos "escape shell" a los argumentos para evitar
  85. // la inyección de código
  86. // recuerda que esto es solo seguridad basica, se deberian
  87. // añadir mas capas para mayor seguridad
  88. $_POST['filename'] = escapeshellcmd($_POST['filename']);
  89. $_POST['mysqluser'] = escapeshellarg($_POST['mysqluser']);
  90. $_POST['mysqlpass'] = escapeshellcmd($_POST['mysqlpass']);
  91. $_POST['backupwhichdb']=escapeshellarg($_POST['backupwhichdb']);
  92.  
  93. // Queremos copiar todas las bases de datos?
  94. $backupall = ($_POST['backupall'] == 'false') ? false : true;
  95.  
  96. // Si queremos copiar todas, ponemos esto con -A en el comando,
  97. // sino, lo ponemos con el nombre de la base de datos a copiar
  98. $dbarg = $backupall ? '-A' : $_POST['backupwhichdb'];
  99.  
  100. // formamos el comando a ejecutar
  101. $command = "mysqldump ".$dbarg." -u ".$_POST['mysqluser'].
  102. " -p".$_POST['mysqlpass']." -r \"".BACKUPDIR.$_POST['filename'].
  103. "\" 2>&1";
  104.  
  105. // creamos una cabecera y mostramos el progreso al usuario
  106. // Podria tomar su tiempo
  107. doHeader('Remote Database Backup');
  108.  
  109. ?><h1>Ejecutando el backup, por favor espere...</h1><?php
  110.  
  111. // execute the command we just set up
  112. system($command);
  113.  
  114. // si eligieron comprimir con bzip, entonces se hace
  115. if ($_POST['bzip'] == 'true') {
  116. system('bzip2 "'.BACKUPDIR.$_POST['filename'].'"');
  117. }
  118.  
  119. // OK, terminamos. Digale al usuario lo que ha pasado.
  120. // Si ocurrio algun error, se muestran en la llamada a system()
  121. ?><h2>Comando ejecutado.
  122. Si hubo errores, Se mostrarán arriba.</h2>
  123. <a href="<?php echo THISPAGE;?>">
  124. Volver al formulario de Backup</a>
  125. <?php
  126.  
  127. // pretty footer
  128. doFooter();
  129.  
  130. // y salidos, hemos terminado!
  131. die();
  132. }
  133.  
  134. // Si el formulario no se envió, entonces se muestra al usuario
  135. // por primera vez con su cabecera
  136. doHeader('Remote Database Backup');
  137.  
  138. ?><h1>Remote Database Backup</h1>
  139. <p><em><strong>Por favor:</strong> una vez pulse Crear,
  140. la copia podría durar unos 15 seg. para que se cree.
  141. La página no se cargará inmediatamente, ten paciencia.</em></p>
  142.  
  143. <form name="dbbackup" method="post" action="<?php echo THISPAGE;?>">
  144. Nombre del fichero: <strong><?php echo BACKUPDIR;?></strong>
  145. <input type="text" name="filename"
  146. value="<?php echo date('dMY_H.i.s').'.sql';?>" /><br />
  147. <input type="checkbox" name="bzip" value="true" id="bzipTick" />
  148. <label for="bzipTick">Usar Bzip2 para compresion</label><br /><br />
  149. Nombre de usuario MySQL:
  150. <input type="text" name="mysqluser" value="" /><br />
  151. Password MySQL:
  152. <input type="password" name="mysqlpass" value="" /><br /><br />
  153. Backup ¿ de que ?<br />
  154. <input type="radio" name="backupall" value="true" id="backupallTrue" />
  155. <label for="backupallTrue">Todas las bases de datos</label><br />
  156. <input type="radio" name="backupall" value="false" id="backupallFalse" />
  157. <label for="backupallFalse">Una en especifico</label>
  158. <input type="text" name="backupwhichdb" value="" /><br />
  159. <br /><br />
  160. <input type="submit" value="Crear" />
  161. </form>
  162.  
  163. <?php
  164.  
  165. // el pie de página
  166. doFooter();
  167.  
  168. ?>

En PHP backup MySQL por admin hace on 30/1/08 | Comentarios