Last active
August 30, 2022 03:23
-
-
Save evilnapsis/6ea32923a6bace61ebe00bb4dfdb42f0 to your computer and use it in GitHub Desktop.
Algoritmo para respaldar una base de datos mysql con PHP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment