Algoritmo para Respaldar Bases de Datos MySQL con PHP


El siguiente es un algoritmo en PHP que sirve para hacer un respaldo de las tablas y los datos de una base de datos MySQL.

Para entender el algoritmo hay que saber algunas cosas básicas de php y mysql y las funciones y consultas sql.

El algoritmo o código busca devolver el código SQL que se uso para crear las tablas, también devuelve el código SQL para insertar los datos a las tablas.

El algoritmo devuelve un archivo resultado muy similar al que retorna el PHPmyadmin u algun otro manejador de base de datos.

Código

El código lo dejo en un Gist de Github para que sea mas fácil de compartir.

<?php
/**
* Algoritmo para hacer respaldo de base de datos MySQL
* Evilnapsis
* http://evilnapsis.com/
*/
// Datos de Acceso a la base de datos
$dbhost = 'localhost'; // Host de la base de datos
$dbuser = 'root'; // Usuario de la base de datos
$dbpass = ''; // Password de la base de datos
$dbname = 'akoomax'; // Nombre de la base de datos
$tables = '*'; // Tablas separadas por comma y * si son todas las tablas
// Llamar la funcion
respaldar_db($dbhost, $dbuser, $dbpass, $dbname, $tables);
// Funcion respaldar_db
function respaldar_db($host, $user, $pass, $dbname, $tables = '*') {
$link = mysqli_connect($host,$user,$pass, $dbname);
// Revisar la coneccion
if (mysqli_connect_errno())
{
echo "Fallo la conexion a MySQL: " . mysqli_connect_error();
exit;
}
mysqli_query($link, "SET NAMES 'utf8'");
// Obtener todas las tablas
if($tables == '*')
{
$tables = array();
$result = mysqli_query($link, 'SHOW TABLES'); // Obtener el nombre de todas las tablas
while($row = mysqli_fetch_row($result))
{
$tables[] = $row[0];
}
}
else
{
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
$return = '';
// Recorrido en todas las tablas
foreach($tables as $table)
{
$result = mysqli_query($link, 'SELECT * FROM '.$table);
$num_fields = mysqli_num_fields($result);
$num_rows = mysqli_num_rows($result);
$return.= 'DROP TABLE IF EXISTS '.$table.';'; // Este es un texto que se agrega al archivo
$row2 = mysqli_fetch_row(mysqli_query($link, 'SHOW CREATE TABLE '.$table)); // Se obtiene el codigo SQL para crear las tablas
$return.= "\n\n".$row2[1].";\n\n";
$counter = 1;
// Obtener campos
for ($i = 0; $i < $num_fields; $i++)
{ // Obtener filas
while($row = mysqli_fetch_row($result))
{
if($counter == 1){
$return.= 'INSERT INTO '.$table.' VALUES('; // Se crea el codigo SQL para insertar los datos a las tablas
} else{
$return.= '(';
}
// En Campos
for($j=0; $j<$num_fields; $j++)
{
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
if($num_rows == $counter){
$return.= ");\n";
} else{
$return.= "),\n";
}
++$counter;
}
}
$return.="\n\n\n";
}
// Guardar el archivo
$fileName = 'respaldo-'.time().'.sql'; // El resultado del respaldo queda en un archivo con extension .sql
$handle = fopen($fileName,'w+');
fwrite($handle,$return);
if(fclose($handle)){
echo "Finalizado, Se guardo el respaldo en el archivo: ".$fileName;
exit;
}
}
view raw respaldardb.php hosted with ❤ by GitHub

Se agregaron comentarios para hacer mas entendible el codigo.

Para hacer que funcione el código solo es necesario agregar el archivo.php a la carpeta htdocs y colocar los datos de conexión a la base de datos, en la linea 10 a la 13.

En la linea 21 se crea la conexión a la base de datos.

Espero les sirva este algoritmo/codigo y si tienen alguna duda por favor contactarme en el formulario de contacto en redes sociales o whatsapp.