Realizar copias de seguridad es una tarea súper importante para todo desarrollador web que se precie. Llevando a cabo backups de tus bases de datos regularmente evitarás el riesgo de perder datos y te ayudará a restaurar cualquier información en el caso de que se haya producido algún problema. Es por eso, que realizar backups en cualquier desarrollo siempre es una muy buena idea.
Existen múltiples método para realizar backups en bases de datos MySQL. Por ejemplo, es más que seguro que en el panel de control de tu alojamiento haya una opción para ello. Pero si deseas realizar copias de seguridad sin necesidad de estar conectándote a tu panel de control cada vez que quieras llevar a cabo un backup, puedes hacerlo mediante un script utilizando PHP. En este tutorial, desarrollaré un script PHP que realizará una copia de seguridad de una base de datos MySQL, y que la guardará en un fichero .sql.
Realizar un backup de una base de datos MySQL utilizando PHP
Todo el código está encerrado en la función backupDatabaseTables(). Mediante la función backupDatabaseTables() podrás realizar copias de seguridad de tablas concretas o de todas las tablas que pueblan tu base de datos. Necesitaremos pasar los siguientes parámetros a la función para realizar el backup.
- $dbHost - Obligatorio. Define el host de la base de datos.
- $dbUsername - Obligatorio. Define el nombre de usuario de la base de datos.
- $dbPassword - Obligatorio. Define la contraseña de la base de datos.
- $dbName - Obligatorio. Define la base de datos que desea copiar.
- $tables - Opcional. Define los nombres de las tablas en un array o una cadena separadas por comas. Si quieres realizar un backup de todas las tablas, omite este parámetro.
<?php /** * @function backupDatabaseTables * @author CodexWorld * @link http://www.codexworld.com * @usage Backup database tables and save in SQL file */ function backupDatabaseTables($dbHost,$dbUsername,$dbPassword,$dbName,$tables = '*'){ //connect & select the database $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); //get all of the tables if($tables == '*'){ $tables = array(); $result = $db->query("SHOW TABLES"); while($row = $result->fetch_row()){ $tables[] = $row[0]; } }else{ $tables = is_array($tables)?$tables:explode(',',$tables); } //loop through the tables foreach($tables as $table){ $result = $db->query("SELECT * FROM $table"); $numColumns = $result->field_count; $return .= "DROP TABLE $table;"; $result2 = $db->query("SHOW CREATE TABLE $table"); $row2 = $result2->fetch_row(); $return .= "nn".$row2[1].";nn"; for($i = 0; $i < $numColumns; $i++){ while($row = $result->fetch_row()){ $return .= "INSERT INTO $table VALUES("; for($j=0; $j < $numColumns; $j++){ $row[$j] = addslashes($row[$j]); $row[$j] = ereg_replace("n","n",$row[$j]); if (isset($row[$j])) { $return .= '"'.$row[$j].'"' ; } else { $return .= '""'; } if ($j < ($numColumns-1)) { $return.= ','; } } $return .= ");n"; } } $return .= "nnn"; } //save file $handle = fopen('db-backup-'.time().'.sql','w+'); fwrite($handle,$return); fclose($handle); }
Uso
Así utilizaríamos la función backupDatabaseTables() si queremos realizar el backup de nuestra base de datos:
backupDatabaseTables('localhost','root','*****','noprog');
Fuente: codexworld.com