Foros del Web » Programando para Internet » PHP »

[APORTE] Backup base de datos

Estas en el tema de [APORTE] Backup base de datos en el foro de PHP en Foros del Web. En el foro ya han sugerido métodos para hacer un backup o dumpear la base de datos. Este es el que yo uso para hacerlo ...
  #1 (permalink)  
Antiguo 09/08/2010, 17:28
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
[APORTE] Backup base de datos

En el foro ya han sugerido métodos para hacer un backup o dumpear la base de datos. Este es el que yo uso para hacerlo con un cron job.
Código PHP:
Ver original
  1. <?php
  2. # % -> esta línea la pueden quitar es para evitar un error con el highlight
  3.  
  4. define('DB_NAME', 'nombre');
  5. define('DB_HOST', 'localhost');
  6. define('DB_USER', 'usuario');
  7. define('DB_PASS', 'contraseña');
  8.  
  9.  
  10. function setQuery($setSelectQueryStr, $fetchType = NULL){
  11.     $arr = array();
  12.  
  13.     try{
  14.         $db = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS);
  15.         $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  16.  
  17.         $pdoQuery = $db->query($setSelectQueryStr);
  18.         $fetchType = empty($fetchType) ? PDO::FETCH_ASSOC : $fetchType;
  19.         $arr = ($pdoQuery->rowCount() > 0) ? $pdoQuery->fetchAll($fetchType) : array();
  20.  
  21.     }catch(PDOException $e){
  22.         echo $e->getMessage();
  23.         exit;
  24.     }
  25.  
  26.     return $arr;
  27. }
  28.  
  29.  
  30.  
  31.  
  32. define('NL', PHP_EOL);
  33.  
  34. $drop = true;
  35. $tables = array();
  36. $extra = array();
  37. $constraints = array();
  38.  
  39. $f = fopen(DB_NAME . '.sql', 'w');
  40.  
  41. $query = setQuery('SHOW TABLES FROM `' . DB_NAME . '`', PDO::FETCH_NUM);
  42. foreach($query as $row){
  43.     $tables[] = $row[0];
  44. }
  45.  
  46. $extra['dumpVersion'] = "1.0";
  47. $extra['dtTm'] = date("Y-m-d H:i:s");
  48. $extra['serverVersion'] = $db->getAttribute(PDO::ATTR_SERVER_VERSION);
  49. $extra['phpVersion'] = phpversion();
  50. $extra['dbName'] = DB_NAME;
  51.  
  52. $t = array();
  53. foreach($tables as $k => $v){
  54.     $t[] = "[$k] => $v;";
  55. }
  56. $extra['tables'] = implode(NL . '--           ', $t);
  57.  
  58. $text = <<<HEADERTEXT
  59. -- dumpFDW  
  60. -- version {$extra['dumpVersion']}
  61. -- http://www.forosdelweb.com/miembros/abimaelrc/
  62. --  
  63. -- Host: {$_SERVER['HTTP_HOST']}
  64. -- Generation Time: {$extra['dtTm']}
  65. -- Server version: {$extra['serverVersion']}
  66. -- PHP Version: {$extra['phpVersion']}
  67. -- Database: '{$extra['dbName']}'
  68. -- Tables: {$extra['tables']}
  69. HEADERTEXT;
  70.  
  71. fwrite($f, $text);
  72.  
  73. foreach ($tables as $table){
  74.     fwrite($f, NL . NL .($drop ? "DROP TABLE IF EXISTS `$table`;" : "-- No especificado.") . NL);
  75.  
  76.     $query = setQuery("SHOW CREATE TABLE `$table`", PDO::FETCH_NUM);
  77.     foreach($query as $row){
  78.         $arr = explode("\n", $row[1]);
  79.         $tmpArr = array();
  80.         foreach($arr as $key => $value){
  81.             if(stripos($value, "CONSTRAINT") !== false){
  82.                 $tmpArr[] = '  ADD ' . trim($value);
  83.                 if(array_key_exists($key - 1, $arr)){
  84.                     $arr[$key - 1] = str_replace(',','',$arr[$key - 1]);
  85.                 }
  86.                 unset($arr[$key]);
  87.             }
  88.         }
  89.         if(!empty($tmpArr)){
  90.             $constraints[] = 'ALTER TABLE ' . $row[0] . NL . implode(NL, $tmpArr) . ';';
  91.         }
  92.         fwrite($f, implode(NL, $arr) . ';' . NL . NL);
  93.     }
  94.  
  95.  
  96.     $query = setQuery("SELECT * FROM `$table`");
  97.  
  98.     $n = 0;
  99.     $nR = count($query) - 1;
  100.     foreach($query as $qry){
  101.         $columnas = array_keys($qry);
  102.         $values = array();
  103.         $keys = array();
  104.  
  105.         foreach($columnas as $columna){
  106.             $keys[] = "`".$columna."`";
  107.             if( is_numeric($qry[$columna]) || is_null($qry[$columna]) ){
  108.                 $values[] = $qry[$columna];
  109.             } else{
  110.                 $values[] = "'" . str_replace(array("'", NL), array("''", '\r\n'), addcslashes($qry[$columna], '\\')) . "'";
  111.             }
  112.         }
  113.  
  114.         /* $sC = special Char, saber cual cáracter especial colocar al final del código */
  115.         $sC = ($n%2000 == 1999 || $n == $nR ? ";" : ",");
  116.  
  117.         if($n%2000 == 0){
  118.             fwrite($f, "INSERT INTO `$table`(".implode(", ", $keys).") VALUES " . NL . "(" . implode(", ", $values) . ")" . $sC . NL);
  119.         }else{
  120.             fwrite($f, "(" . implode(", ", $values) . ")" . $sC . NL);
  121.         }
  122.         $n++;
  123.     }
  124. }
  125.  
  126. if(!empty($constraints)){
  127.     fwrite($f, NL . NL . implode(NL . NL, $constraints));
  128. }
  129.  
  130. fclose($f);
Otros temas para dumpear son
http://www.forosdelweb.com/f18/backu...o-1-0b-166532/
y http://www.forosdelweb.com/f54/tutor...igdump-376908/

Nota:
12-29-2010 Se quito la clase singleton, no es útil para base de datos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 28/12/2010 a las 22:19
  #2 (permalink)  
Antiguo 09/08/2010, 18:13
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: [APORTE] Backup base de datos

Excelente, Abimael, voy a comenzar a usarlo, gracias por compartir!!!
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 28/12/2010, 19:57
Avatar de ARICARRARO  
Fecha de Ingreso: diciembre-2010
Ubicación: México
Mensajes: 227
Antigüedad: 14 años
Puntos: 10
Respuesta: [APORTE] Backup base de datos

Excelente aporte.
  #4 (permalink)  
Antiguo 15/01/2012, 03:08
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 11 meses
Puntos: 21
Respuesta: [APORTE] Backup base de datos

Subo esta rutina al sevidor y me dice:

Fatal error: Class 'PDO' not found in C:\EasyWAMP\www\a\backup1.php on line 42

¿Debo hacer algo más?
¿Sigue siendo recomendable utilizar esta rutina tal como se encuentra? (Ya tiene 1 1/2 años)

Gracias
  #5 (permalink)  
Antiguo 16/01/2012, 05:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: [APORTE] Backup base de datos

Esta rutina sigue actualizada. El problema es que el servidor donde lo estas probando no esta actualizado con PHP.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 04/06/2012, 07:52
Avatar de fabrikt  
Fecha de Ingreso: mayo-2012
Ubicación: Parana, Entre Rios
Mensajes: 12
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: [APORTE] Backup base de datos

Una consulta el dump me funciona pero no logro restaurar la base de datos con el archivo dump.txt probe el ejemplo que figura aca pero nada que podra ser???

Etiquetas: aportes
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 07:43.