Quobit

Cultura Digital, Tutoriales, tecnología y gadgets

Script para hacer backup de una base de datos MySQL y MySQLi con PHP

codigo programacion

codigo programacion

En ocasiones no se tiene acceso al panel de control o PHPMyAdmin de una cuenta de Hosting, y es necesario hacer un respaldo de la base de datos de MySQL. Ya sea por un falló a nivel técnico o simplemente por precaución.

Y por ello hoy te comparto este script que encontré en la red y he optimizado para poder respaldar la información de una base de datos MySQL usando solo PHP. Está función recibe como parámetros el: Usuario, Contraseña y nombre de tu base de datos y al final te entrega un archivo .sql que puedes descargar a tu PC.

Como siempre, si tienes alguna duda con gusto puedes dejarla en los comentarios:

Llamada a la función:

$arr_datos = new array(
    ‘db_host’=> »,  //mysql host
    ‘db_uname’ => »,  //usuario
    ‘db_password’ => », //password
    ‘db_to_backup’ => », //nombre de la base de datos
    ‘db_backup_path’ => », //directorio en tu servidor donde se hará el backup
);
backup_mysql_database ( $arr_datos );

Función de respaldo de MySQL

Está función opera con MySQLi:

 

function backup_mysql_database($params)
{
    $mtables = array();
    $contents = «– Database: `».$params[‘db_to_backup’].«` —\n«;
   
    $mysqli = new mysqli($params[‘db_host’], $params[‘db_uname’], $params[‘db_password’], $params[‘db_to_backup’], «3306»);
    if ($mysqli->connect_error) {
        die(‘Error : (‘. $mysqli->connect_errno .‘) ‘. $mysqli->connect_error);
    }
   
    $results = $mysqli->query(«SHOW TABLES»);
   
    while($row = $results->fetch_array()){
            $mtables[] = $row[0];
    }

    foreach($mtables as $table){
        $contents .= «– Table `».$table.«` —\n«;
       
        $results = $mysqli->query(«SHOW CREATE TABLE «.$table);
        while($row = $results->fetch_array()){
            $contents .= $row[1].«;\n\n«;
        }

        $results = $mysqli->query(«SELECT * FROM «.$table);
        $row_count = $results->num_rows;
        $fields = $results->fetch_fields();
        $fields_count = count($fields);
       
        $insert_head = «INSERT INTO `».$table.«` («;
        for($i=0; $i < $fields_count; $i++){
            $insert_head  .= «`».$fields[$i]->name.«`»;
                if($i < $fields_count1){
                        $insert_head  .= ‘, ‘;
                    }
        }
        $insert_head .=  «)»;
        $insert_head .= » VALUES\n«;       
               
        if($row_count>0){
            $r = 0;
            while($row = $results->fetch_array()){
                if(($r % 400)  == 0){
                    $contents .= $insert_head;
                }
                $contents .= «(«;
                for($i=0; $i < $fields_count; $i++){
                    $row_content =  str_replace(«\n«,«\\,$mysqli->real_escape_string($row[$i]));
                   
                    switch($fields[$i]->type){
                        case 8: case 3:
                            $contents .=  $row_content;
                            break;
                        default:
                            $contents .= «‘». $row_content .«‘»;
                    }
                    if($i < $fields_count1){
                            $contents  .= ‘, ‘;
                        }
                }
                if(($r+1) == $row_count || ($r % 400) == 399){
                    $contents .= «);\n\n«;
                }else{
                    $contents .= «),\n«;
                }
                $r++;
            }
        }
    }
   
    if (!is_dir ( $params[‘db_backup_path’] )) {
            mkdir ( $params[‘db_backup_path’], 0777, true );
     }
   
    $backup_file_name = «sql-backup-«.date( «d-m-Y–h-i-s»).«.sql»;
         
    $fp = fopen($backup_file_name ,‘w+’);
    if (($result = fwrite($fp, $contents))) {
        echo «Respaldo creado. Haz clic aquí para descargar <a href=’$backup_file_name‘>Descargar </a>»;
    }
    fclose($fp);
}