En ocasiones necesitamos tener una aplicación externa para poder realizar la copia de seguridad de una base de datos o mas. En esta ocasión realizaremos para la base de datos MySql.
Realizar copias de bases de datos mediante un script de PHP puede ser útil si no tenemos acceso SSH al servidor o a un cpanel.
Al ejecutar este creará en la misma raíz del proyecto un archivo .zip en el cuál estará el archivo .sql.
link de descarga del proyecto: Proyecto Restore
index.php
<?php error_reporting( E_ALL & ~E_NOTICE ); define( 'Str_VERS', "4.0.0" ); define( 'Str_DATE', "21 de Febrero de 2016" ); function query($conn, $query_string) { $query_id = mysqli_query($conn, $query_string); if( !$query_id) { problemas($conn, "Invalid SQL: ".$query_string); } return $query_id; } function free_result($query_id=-1) { if( $query_id!=-1) { $query_id=$query_id; } return @mysqli_free_result($query_id); } function strip_backticks(&$text) { return $text; } function query_first($conn, $query_string) { $res = query($conn,$query_string); $returnarray = fetch_array($res); free_result($res); return $returnarray; } function fetch_array($query_id=-1) { if( $query_id!=-1) { $query_id=$query_id; } $record = mysqli_fetch_array($query_id); return $record; } function fetch_table_dump_sql($conn, $table, $fp = 0) { $tabledump = "--\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $tabledump = "-- Table structure for table `$table`\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $tabledump = "--\n\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $tabledump = query_first($conn, "SHOW CREATE TABLE $table"); strip_backticks($tabledump['Create Table']); $tabledump = "DROP TABLE IF EXISTS $table;\n" . $tabledump['Create Table'] . ";\n\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $tabledump = "--\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $tabledump = "-- Dumping data for table `$table`\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $tabledump = "--\n\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $tabledump = "LOCK TABLES $table WRITE;\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); $rows = query($conn, "SELECT * FROM $table"); $numfields= mysqli_num_fields($rows); while ($row = fetch_array($rows, DBARRAY_NUM)) { $tabledump = "INSERT INTO $table VALUES("; $fieldcounter = -1; $firstfield = 1; // campos while (++$fieldcounter < $numfields) { if( !$firstfield) { $tabledump .= ', '; } else { $firstfield = 0; } if( !isset($row["$fieldcounter"])) { $tabledump .= 'NULL'; } else { $tabledump .= "'" . mysqli_real_escape_string ($conn, $row["$fieldcounter"]) . "'"; } } $tabledump .= ");\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); } free_result($rows); $tabledump = "UNLOCK TABLES;\n"; if( !$hay_Zlib ) fwrite($fp, $tabledump); else gzwrite($fp, $tabledump); } function problemas($conn, $msg) { $errdesc = mysqli_error($conn); $errno = mysqli_error($conn); $message = "<br>"; $message .= "- Ha habido un problema accediendo a la Base de Datos<br>"; $message .= "- Error $appname: $msg<br>"; $message .= "- Error mysql: $errdesc<br>"; $message .= "- Error número mysql: $errno<br>"; $message .= "- Script: ".getenv("REQUEST_URI")."<br>"; $message .= "- Referer: ".getenv("HTTP_REFERER")."<br>"; echo( "</strong><br><br><hr><center><small>" ); setlocale( LC_TIME,"spanish" ); echo strftime( "%A %d %B %Y - %H:%M:%S", time() ); echo( "<br> 2017 <a href=\"mailto:info@cloudsrcsoft.com\">CloudSrcSoft</a><br>" ); echo( "vers." . Str_VERS . "<br>" ); echo( "</small></center>" ); die(""); } function validarHost($servername, $username, $password, $database){ $conn = @mysqli_connect( $servername, $username, $password ); $error = false; $tablas = 0; if($conn) $db = @mysqli_select_db($conn, $database); if( !$conn || !$db ) { echo( "<br> - La conexion con la Base de datos ha fallado: <br> ".mysqli_connect_error($conn)."" ); $error = true; } else { echo( "<br> - Conexión establecida." ); $error = false; } if( !@function_exists( 'gzopen' ) ) { $hay_Zlib = false; echo( "<br> - Ya que no está disponible Zlib, Guardaré la Base de Datos sin comprimir, como '$filename'" ); } else { $filename = $database . ".sql.gz"; $hay_Zlib = true; echo( "<br> - Ya que está disponible Zlib, Guardaré la Base de Datos comprimida, como '$filename'" ); } if( !$error ) { // MySQL versión $result = mysqli_query($conn, 'SELECT VERSION() AS version' ); if( $result != FALSE && @mysqli_num_rows($result) > 0 ) { $row = mysqli_fetch_array($result); } else { $result = @mysql_query( 'SHOW VARIABLES LIKE \'version\'' ); if( $result != FALSE && @mysqli_num_rows($result) > 0 ){ $row = mysqli_fetch_row($result); } } if(! isset($row) ) { $row['version'] = '3.21.0'; } } if( !$error ) { $el_path = getenv("REQUEST_URI"); $el_path = substr($el_path, strpos($el_path, "/"), strrpos($el_path, "/")); $sql = "SHOW TABLES FROM $database"; $result = mysqli_query($conn, $sql); if (!$result) { echo "DB Error, could not list tables\n"; echo 'MySQL Error: ' . mysqli_error($conn); exit; } else { $t_start = time(); if( !$hay_Zlib ) $filehandle = fopen( $filename, 'w' ); else $filehandle = gzopen( $filename, 'w6' ); // nivel de compresión if( !$filehandle ) { $el_path = getenv("REQUEST_URI"); $el_path = substr($el_path, strpos($el_path, "/"), strrpos($el_path, "/")); echo( "<br>" ); echo( "- No he podido crear '$filename' en '$el_path/'. Por favor, asegúrese de<br>" ); echo( " que dispone de privilegios de escritura.<br>" ); } else { $tabledump = "-- Dump de la Base de Datos\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); setlocale( LC_TIME,"spanish" ); $tabledump = "-- Fecha: " . strftime( "%A %d %B %Y - %H:%M:%S", time() ) . "\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $tabledump = "--\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $tabledump = "-- Version: " . Str_VERS . ", del " . Str_DATE . ", insidephp@gmail.com\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $tabledump = "-- Soporte y Updaters: http://computersac.com/"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $tabledump = "--\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $tabledump = "-- Host: `$db_server` Database: `$database`\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $tabledump = "-- ------------------------------------------------------\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $tabledump = "-- Server version ". $row['version'] . "\n\n"; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); $result = query($conn, 'SHOW tables' ); while( $currow = fetch_array($result, DBARRAY_NUM) ) { fetch_table_dump_sql($conn, $currow[0], $filehandle ); fwrite( $filehandle, "\n" ); if( !$hay_Zlib ) fwrite( $filehandle, "\n" ); else gzwrite( $filehandle, "\n" ); $tablas++; } $tabledump = "\n-- Dump de la Base de Datos Completo."; if( !$hay_Zlib ) fwrite( $filehandle, $tabledump ); else gzwrite( $filehandle, $tabledump ); if( !$hay_Zlib ) fclose( $filehandle ); else gzclose( $filehandle ); $t_now = time(); $t_delta = $t_now - $t_start; if( !$t_delta ) $t_delta = 1; $t_delta = floor(($t_delta-(floor($t_delta/3600)*3600))/60)." minutos y " .floor($t_delta-(floor($t_delta/60))*60)." segundos."; echo( "<br> - He guardado las $tablas tablas en $t_delta<br>" ); echo( "<br>" ); echo( "- El Dump de la Base de Datos está completo.<br>" ); echo( "- He guardado la Base de Datos en: $el_path/$filename<br>" ); echo( "<br>" ); echo( "- Puede bajársela directamente: </strong><a href=\"$filename\">$filename</a>" ); $size = filesize($filename); $size = number_format( $size ); $size = str_replace( ",",".",$size ); echo( " <small>($size bytes)</small><br>" ); } } } } ?>
para el código completo descarga el proyecto de mega.nz
link de descarga del proyecto: Proyecto Restore
También puedes compartir el proyecto a través del siguiente enlace vía facebook:
0 comentarios:
Publicar un comentario