Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/08/2010, 17:28
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 4 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