Cómo realizar un backup de una base de datos MySQL utilizando PHP

Realizar copias de seguridad es una tarea súper importante para todo desarrollador web que se precie. Llevando a cabo backups de tus bases de datos regularmente evitarás el riesgo de perder datos y te ayudará a restaurar cualquier información en el caso de que se haya producido algún problema. Es por eso, que realizar backups en cualquier desarrollo siempre es una muy buena idea.

Existen múltiples método para realizar backups en bases de datos MySQL. Por ejemplo, es más que seguro que en el panel de control de tu alojamiento haya una opción para ello. Pero si deseas realizar copias de seguridad sin necesidad de estar conectándote a tu panel de control cada vez que quieras llevar a cabo un backup, puedes hacerlo mediante un script utilizando PHP. En este tutorial, desarrollaré un script PHP que realizará una copia de seguridad de una base de datos MySQL, y que la guardará en un fichero .sql.

Realizar un backup de una base de datos MySQL utilizando PHP

Todo el código está encerrado en la función backupDatabaseTables(). Mediante la función backupDatabaseTables() podrás realizar copias de seguridad de tablas concretas o de todas las tablas que pueblan tu base de datos. Necesitaremos pasar los siguientes parámetros a la función para realizar el backup.

  • $dbHost - Obligatorio. Define el host de la base de datos.
  • $dbUsername - Obligatorio. Define el nombre de usuario de la base de datos.
  • $dbPassword - Obligatorio. Define la contraseña de la base de datos.
  • $dbName - Obligatorio. Define la base de datos que desea copiar.
  • $tables - Opcional. Define los nombres de las tablas en un array o una cadena separadas por comas. Si quieres realizar un backup de todas las tablas, omite este parámetro.
<?php

/**
 * @function    backupDatabaseTables
 * @author      CodexWorld
 * @link        http://www.codexworld.com
 * @usage       Backup database tables and save in SQL file
 */
function backupDatabaseTables($dbHost,$dbUsername,$dbPassword,$dbName,$tables = '*'){
    //connect & select the database
    $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); 

    //get all of the tables
    if($tables == '*'){
        $tables = array();
        $result = $db->query("SHOW TABLES");
        while($row = $result->fetch_row()){
            $tables[] = $row[0];
        }
    }else{
        $tables = is_array($tables)?$tables:explode(',',$tables);
    }

    //loop through the tables
    foreach($tables as $table){
        $result = $db->query("SELECT * FROM $table");
        $numColumns = $result->field_count;

        $return .= "DROP TABLE $table;";

        $result2 = $db->query("SHOW CREATE TABLE $table");
        $row2 = $result2->fetch_row();

        $return .= "nn".$row2[1].";nn";

        for($i = 0; $i < $numColumns; $i++){
            while($row = $result->fetch_row()){
                $return .= "INSERT INTO $table VALUES(";
                for($j=0; $j < $numColumns; $j++){
                    $row[$j] = addslashes($row[$j]);
                    $row[$j] = ereg_replace("n","n",$row[$j]);
                    if (isset($row[$j])) { $return .= '"'.$row[$j].'"' ; } else { $return .= '""'; }
                    if ($j < ($numColumns-1)) { $return.= ','; }
                }
                $return .= ");n";
            }
        }

        $return .= "nnn";
    }

    //save file
    $handle = fopen('db-backup-'.time().'.sql','w+');
    fwrite($handle,$return);
    fclose($handle);
}

Uso

Así utilizaríamos la función backupDatabaseTables() si queremos realizar el backup de nuestra base de datos:

backupDatabaseTables('localhost','root','*****','noprog');

Fuente: codexworld.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP