Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: aprendiz_web en 10 Diciembre 2013, 08:43 am



Título: Ayuda backup php mysql
Publicado por: aprendiz_web en 10 Diciembre 2013, 08:43 am
Alguien me podria ayudar a respaldar una base de datos y despues restaurarla
Porfavor


Título: Re: Ayuda backup php mysql
Publicado por: el-brujo en 10 Diciembre 2013, 10:00 am
¿Respaldar usando phpMyAdmin, o vía comandos o usando algún otro programa tipo Navicat?

¿Qué tipo de base de datos quieres hacer copia de seguridad? ¿De un foro?

¿Respaldo local o remoto?

Investiga sobre el comando mysqldump o mysqlhotcopy si usas tablas en MyIsam.

Ejemplo mysqlhotcopy Remoto:
Código:
/var/local/mysql/bin/mysqlhotcopy --method=scp --user=mysql --password=pass base_datos remoteuser@ip:/home/mysql


Título: Re: Ayuda backup php mysql
Publicado por: aprendiz_web en 10 Diciembre 2013, 17:01 pm
Gracias: el-brujo

Bueno investigando y buscando ya tengo como hacer el respaldo de las base de datos usando php en mysql,


Ahora lo que no puedo es hacer el restore es decir cargar el archivo sql para restaurar la base de datos, esto también tengo que hacerlo mediante php

Espero me puedas ayudar


Título: Re: Ayuda backup php mysql
Publicado por: :ohk<any> en 10 Diciembre 2013, 17:03 pm
Asumo que necesitas un código que te ayude en esto no?

Código
  1. <?php
  2. class Backup{
  3.    private $usuario;
  4.    private $pass;
  5.    private $database;
  6.    private $servidor;
  7.    private $nombre_archivo;
  8.    private $ruta_carpeta;
  9.  
  10.    public function __construct($db = 'basededatos' , $directorio = 'backups', $usuario = 'usuario', $pass = 'password', $servidor = 'localhost') {
  11.        $this->usuario = $usuario;
  12.        $this->pass = $pass;
  13.        $this->database = $db;
  14.        $this->servidor = $servidor;
  15.  
  16.        // configurar las rutas a las carpetas
  17.        $this->ruta_carpeta = $this->formatearRuta($directorio);
  18.  
  19.    }
  20.  
  21.    public function getNombre(){
  22.        return $this->nombre_archivo;
  23.    }
  24.  
  25.    public function getRutaCarpeta(){
  26.        return $this->ruta_carpeta;
  27.    }
  28.  
  29.    public function generateBackupSQL($nombre, $table = false){
  30.        // escapamos espacios al nombre del backup
  31.        $nombre = $this->limpiarNombre($nombre);
  32.        $this->nombre_archivo = $nombre.'.sql';
  33.        // ver q sistema operativo tenemos
  34.  
  35.  
  36.        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
  37.            //Si es Windows
  38.            $this->generateWindows($nombre, $table);
  39.        }else{
  40.            $this->generateLinux($nombre, $table);
  41.        }
  42.        return true;
  43.  
  44.    }
  45.  
  46.    public function generateBackupZip($nombre, $table = false){
  47.        // escapamos espacios al nombre del backup
  48.        $this->generateBackupSQL($nombre, $table);
  49.        $this->comprimirZip(substr($this->nombre_archivo,0, -4));
  50.        unlink($this->ruta_carpeta.$this->nombre_archivo);
  51.        $this->nombre_archivo = substr($this->nombre_archivo,0, -4).'.zip';
  52.  
  53.        return true;        
  54.    }
  55.  
  56.    // genera el backup para Windows
  57.    private function generateWindows($nombre, $table = false){
  58.        // agregamos la consulta y el usuario
  59.        $cmd = $this->ruta_carpeta."mysqldump.exe -u $this->usuario ";
  60.        // si existe contraseña la agregamos
  61.        if($this->pass != '')
  62.            $cmd .= "-p$this->pass ";
  63.        // si existe servidor distinto al local
  64.        if($this->servidor != 'localhost' and $this->servidor != '127.0.0.1' and $this->servidor != '')
  65.            $cmd .= "-h $this->servidor ";        
  66.        // seleccionamos la base de datos
  67.        $cmd .= " $this->database ";
  68.        // si existe una tabla
  69.        if($table)
  70.            $cmd .= " $table ";
  71.        //definimos el nombre para el backup
  72.        $cmd .= " > $this->ruta_carpeta$nombre.sql ";
  73.  
  74.        shell_exec($cmd);
  75.    }
  76.  
  77.    // genera el backup para Linux
  78.    private function generateLinux($nombre, $table = false){
  79.        // agregamos la consulta y el usuario
  80.        $cmd = "mysqldump -u $this->usuario ";
  81.        // si existe contraseña la agregamos
  82.        if($this->pass != '')
  83.            $cmd .= "-p$this->pass ";
  84.        // si existe servidor distinto al local
  85.        if($this->servidor != 'localhost' and $this->servidor != '127.0.0.1' and $this->servidor != '')
  86.            $cmd .= "-h $this->servidor ";        
  87.        // seleccionamos la base de datos
  88.        $cmd .= " $this->database ";
  89.        // si existe una tabla
  90.        if($table)
  91.            $cmd .= " $table ";
  92.        //definimos el nombre para el backup
  93.        $cmd .= " > $this->ruta_carpeta$nombre.sql ";
  94.  
  95.        shell_exec($cmd);
  96.    }
  97.  
  98.    public function restaurarBackup($nombre){
  99.        $this->nombre_archivo = $nombre;
  100.        // verifica si el archivo esta compreso
  101.        switch (substr($nombre, -4)) {
  102.        case '.zip':
  103.            $this->descomprimirZip($nombre);
  104.            $nombre = substr($nombre, 0, -4).'.sql';
  105.            break;
  106.        case '.rar':
  107.            /// descomprimir rar
  108.            break;
  109.        }
  110.  
  111.  
  112.        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'){
  113.            //Si es Windows
  114.            $this->restaurarWindows($nombre);
  115.        }else{
  116.            // si es linux u otro SO
  117.            $this->restaurarLinux($nombre);
  118.        }
  119.        return true;
  120.    }
  121.  
  122.    private function restaurarWindows($nombre){
  123.  
  124.        // establese el nombre de usuario
  125.        $cmd = $this->ruta_carpeta."mysql.exe -u $this->usuario ";
  126.        // si existe contraseña la agregamos
  127.        if($this->pass != '')
  128.            $cmd .= "-p$this->pass ";
  129.        // si existe servidor distinto al local
  130.        if($this->servidor != 'localhost' and $this->servidor != '127.0.0.1' and $this->servidor != '')
  131.            $cmd .= "-h $this->servidor ";
  132.        // seleccionamos la base de datos y la ruta del archivo a restaurar
  133.        $cmd .= " $this->database < $this->ruta_carpeta$nombre";
  134.  
  135.        // ejecuta el comando
  136.        shell_exec($cmd);
  137.        // si el archivo q se llamo a restaurar es un archivo compreso elimina el .sql q fue descompreso
  138.        if(substr($this->nombre_archivo, -4) != '.sql')
  139.            unlink($this->ruta_carpeta.$nombre);
  140.  
  141.        return true;
  142.    }
  143.  
  144.    private function restaurarLinux($nombre){
  145.  
  146.        // establese el nombre de usuario
  147.        $cmd = "mysql -u $this->usuario ";
  148.        // si existe contraseña la agregamos
  149.        if($this->pass != '')
  150.            $cmd .= "-p$this->pass ";
  151.        // si existe servidor distinto al local
  152.        if($this->servidor != 'localhost' and $this->servidor != '127.0.0.1' and $this->servidor != '')
  153.            $cmd .= "-h $this->servidor ";
  154.        // seleccionamos la base de datos y la ruta del archivo a restaurar
  155.        $cmd .= " $this->database < $this->ruta_carpeta$nombre";
  156.  
  157.        // ejecuta el comando
  158.        shell_exec($cmd);
  159.        // si el archivo q se llamo a restaurar es un archivo compreso elimina el .sql q fue descompreso
  160.        if(substr($this->nombre_archivo, -4) != '.sql')
  161.            unlink($this->ruta_carpeta.$nombre);
  162.  
  163.        return true;
  164.    }
  165.  
  166.    private function descomprimirZip($nombre){
  167.        $zip = new ZipArchive();
  168.        if($zip->open($this->ruta_carpeta.'/'.$nombre) === true){
  169.            $zip->extractTo($this->ruta_carpeta.'/');
  170.            $zip->close();
  171.            return true;
  172.        }
  173.  
  174.        return false;
  175.    }
  176.  
  177.    private function comprimirZip($nombre){
  178.        $zip = new ZipArchive();
  179.        $filename = $this->ruta_carpeta.'/'.$nombre.'.zip';
  180.  
  181.        if($zip->open($filename, ZipArchive::CREATE) === true){
  182.            $zip->addFile($this->ruta_carpeta."/".$nombre.'.sql', $nombre.'.sql' );
  183.            $zip->close();
  184.            return true;
  185.        }else{
  186.            return false;
  187.        }
  188.    }
  189.  
  190.    public function limpiarNombre($nombre){
  191.        $nombre = trim($nombre);
  192.        return preg_replace("/[^a-z0-9]+/i", "-", $nombre);
  193.    }
  194.  
  195.    private function formatearRuta($ruta){
  196.        /**
  197.          * Reemplaza los separadores de directorio incorrectos por los correctos segun el sistema operativo
  198.          * por lo que es lo mismo poner:
  199.          *
  200.          * carpeta1/carpeta2/carpeta3
  201.          * o
  202.          * carpeta1\carpeta2\carpeta3
  203.          * o
  204.          * carpeta1/carpeta2\carpeta3
  205.          */
  206.  
  207.  
  208.        $ruta = trim($ruta, '\\/');
  209.        $ruta = str_replace('\\',DIRECTORY_SEPARATOR, $ruta);
  210.        $ruta = str_replace('/',DIRECTORY_SEPARATOR, $ruta).DIRECTORY_SEPARATOR;
  211.        //return getcwd().DIRECTORY_SEPARATOR.$ruta;  //retorna ruta absoluta
  212.        return $ruta;
  213.    }
  214. }
  215.  
  216. ?>
  217.  

En tu carpeta de Buckups deberías tener el mysqldump.exe.

Saludos