
Guardar una copia de la base de datos en el servidor con PHP
Si lo que queremos hacer es guardar una copia de nuestra base de datos MySQL o tablas individuales (hacer un backup), lo podemos hacer con PHP através del siguiente script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | <?php //Ponemos los datos de acceso a nuestra base de datos //y ejecutamos la función backup_tables( 'localhost' , 'root' , 'root' , 'bd' ); /* Hacer backup de una base de datos o de una tabla */ function backup_tables( $host , $user , $pass , $name , $tables = '*' ) { $link = mysql_connect( $host , $user , $pass ); mysql_select_db( $name , $link ); //obtenemos todas las tablas if ( $tables == '*' ) { $tables = array (); $result = mysql_query( 'SHOW TABLES' ); while ( $row = mysql_fetch_row( $result )) { $tables [] = $row [0]; } } else { $tables = is_array ( $tables ) ? $tables : explode ( ',' , $tables ); } foreach ( $tables as $table ) { $result = mysql_query( 'SELECT * FROM ' . $table ); $num_fields = mysql_num_fields( $result ); $return .= 'DROP TABLE ' . $table . ';' ; $row2 = mysql_fetch_row(mysql_query( 'SHOW CREATE TABLE ' . $table )); $return .= "\n\n" . $row2 [1]. ";\n\n" ; for ( $i = 0; $i < $num_fields ; $i ++) { while ( $row = mysql_fetch_row( $result )) { $return .= 'INSERT INTO ' . $table . ' VALUES(' ; for ( $j =0; $j < $num_fields ; $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 <( $num_fields -1)) { $return .= ',' ; } } $return .= ");\n" ; } } $return .= "\n\n\n" ; } //guardamos el archivo $handle = fopen ( 'db-backup-' . date ( "d-m-Y" ). '.sql' , 'w+' ); fwrite( $handle , $return ); fclose( $handle ); } ?> |
El archivo lo guardará en formato .sql con el nombre db-backup seguido de la fecha en que se creó el archivo, por ejemplo, «db-backup-14-11-2012.sql«.
Además si queremos por ejemplo que este script se ejecute todos los días, podemos usar CRON JOBS de Cpanel tal y como expliqué en el artículo anterior.