示例#1
0
 /**
  *
  * Restaurar una BD especifica, a partir de un listado de archivos.
  *
  * @param id_instancia int Id de la instancia que se requiere restaurar
  * @param time int Fecha de creacin del archivo
  * @return status string Estado de la respuesta
  * */
 public static function EspecificaBdRestaurarBd($id_instancia, $time)
 {
     //Codigo nuevo de restaurar bases de datos
     $CadenaSQL = "SELECT * FROM instances WHERE instance_id = {$id_instancia}";
     $RutaBD = POS_PATH_TO_SERVER_ROOT . "/../static_content/db_backups/";
     Logger::log("Restaurando instancia...");
     //$res = InstanciasController::Respaldar_Instancias(json_decode($s));
     global $POS_CONFIG;
     $rs = $POS_CONFIG["CORE_CONN"]->Execute($CadenaSQL);
     $instancia = $rs->GetArray();
     $instancia = $instancia['0'];
     //Saca el array a un nivel superior
     //var_dump($instancias);//hace var dump de los registros obtenidos
     $Nombre_Archivo = $time . "_pos_instance_" . $id_instancia . ".sql";
     //Nombre del archivo a restaurar
     $db_user = $instancia['db_user'];
     $usr_pass = $instancia['db_password'];
     $db_host = $instancia['db_host'];
     $db_name = $instancia['db_name'];
     //se genera una nueva conexion a la bd schema para sacar el no_registros de cada bd
     $instance_con["INSTANCE_CONN"] = null;
     try {
         $instance_con["INSTANCE_CONN"] = ADONewConnection($instancia["db_driver"]);
         $instance_con["INSTANCE_CONN"]->debug = $instancia["db_debug"];
         $instance_con["INSTANCE_CONN"]->PConnect($db_host, $db_user, $usr_pass, "information_schema");
         if (!$instance_con["INSTANCE_CONN"]) {
             Logger::error("Imposible conectarme a la base de datos information_schema");
             die(header("HTTP/1.1 500 INTERNAL SERVER ERROR"));
         }
     } catch (ADODB_Exception $ado_e) {
         Logger::error($ado_e);
         die(header("HTTP/1.1 500 INTERNAL SERVER ERROR"));
     } catch (Exception $e) {
         Logger::error($e);
         die(header("HTTP/1.1 500 INTERNAL SERVER ERROR"));
     }
     if ($instance_con["INSTANCE_CONN"] === NULL) {
         Logger::error("Imposible conectarse con la base de datos information_schema");
         die(header("HTTP/1.1 500 INTERNAL SERVER ERROR"));
     }
     $instance_db_con = $instance_con["INSTANCE_CONN"];
     //antes de eliminar las tablas y restaurar se revisa cuantos registros hay en toda la BD
     $num_regs_db = 0;
     $no_rows = $instance_db_con->Execute('SELECT SUM( TABLE_ROWS ) FROM  `TABLES` WHERE TABLE_SCHEMA = "' . $db_name . '"');
     while ($row = $no_rows->FetchRow()) {
         //row = nombre de la tabla
         $num_regs_db += $row[0];
     }
     $file = $RutaBD . $Nombre_Archivo;
     //se eliminan las tablas
     InstanciasController::Eliminar_Tablas_BD($instancia['instance_id'], $db_host, $db_user, $usr_pass, $db_name);
     $out2 = InstanciasController::restore_pos_instance($instancia['instance_id'], $db_host, $db_user, $db_name, $usr_pass, $file, $instancia['db_driver'], $instancia['db_debug']);
     Logger::log("No registros en la BD ANTES de eliminar tablas: " . $num_regs_db);
     if (!is_null($out2)) {
         return array("status" => "failure", "mensaje" => $out2);
     } else {
         return array("status" => "ok", "Mensaje:" => "archivo: " . $file);
     }
 }