Skip to main content

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

 

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,\\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);
}

¡Dejános un comentario!

Quobit

Quobit

Somos Bit a Bit, llevamos los últimos consejos de tecnología hasta tu smartphone.