Evilnapsis

Programming, Hacking and More

PHP Stuffs

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.

Agustin Ramos

Desarrollador de Software