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; | |
} | |
} |
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.