Редовното архивиране на база данни е много важна задача за разработчиците. Това предотвратява риска от загуба на данни, сякаш възникне някакъв проблем на сървъра, като хакване или срив на сървъра. Така че трябва да зададете планирано архивиране на базата данни, за да предотвратите бъдеща загуба на данни.
Можете да направите резервно копие на базата данни на mysql по много начини. Можете директно да влезете във вашия хостинг cpanel и да направите пълно архивиране само с няколко щраквания, но ако нямате достъп до cpanel, можете да създадете прост PHP скрипт и да го настроите на планирано архивиране. Така че в тази публикация ще споделя следния полезен PHP скрипт за архивиране/експорт на база данни на MySql.
Използвайте следния PHP скрипт, за да направите резервно копие на базата данни на Mysql
<?php // Pass your database information $mysqlUserName = "db Username"; $mysqlPassword = "db Password"; $mysqlHostName = "db Hostname"; $DbName = "database name which you want to take backup"; $backup_name = "backup file name"; //optional $tables = "Your tables"; //optional //or add 5th parameter(array) of specific tables: array("mytable1","mytable2","mytable3") for multiple tables exportDB($mysqlHostName,$mysqlUserName,$mysqlPassword,$DbName, $tables=false, $backup_name=false ); function exportDB($host,$user,$pass,$name, $tables=false, $backup_name=false ) { $mysqli = new mysqli($host,$user,$pass,$name); $mysqli->select_db($name); $mysqli->query("SET NAMES 'utf8'"); $queryTables = $mysqli->query('SHOW TABLES'); while($row = $queryTables->fetch_row()) { $target_tables[] = $row[0]; } if($tables !== false) { $target_tables = array_intersect( $target_tables, $tables); } foreach($target_tables as $table) { $result = $mysqli->query('SELECT * FROM '.$table); $fields_amount = $result->field_count; $rows_num=$mysqli->affected_rows; $res = $mysqli->query('SHOW CREATE TABLE '.$table); $TableMLine = $res->fetch_row(); $content = (!isset($content) ? '' : $content) . "\n\n".$TableMLine[1].";\n\n"; for ($i = 0, $st_counter = 0; $i < $fields_amount; $i++, $st_counter=0) { while($row = $result->fetch_row()) { //when started (and every after 100 command cycle): if ($st_counter%100 == 0 || $st_counter == 0 ) { $content .= "\nINSERT INTO ".$table." VALUES"; } $content .= "\n("; for($j=0; $j<$fields_amount; $j++) { $row[$j] = str_replace("\n","\\n", addslashes($row[$j]) ); if (isset($row[$j])) { $content .= '"'.$row[$j].'"' ; } else { $content .= '""'; } if ($j<($fields_amount-1)) { $content.= ','; } } $content .=")"; //every after 100 command cycle [or at last line] ....p.s. but should be inserted 1 cycle eariler if ( (($st_counter+1)%100==0 && $st_counter!=0) || $st_counter+1==$rows_num) { $content .= ";"; } else { $content .= ","; } $st_counter=$st_counter+1; } } $content .="\n\n\n"; } //$backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').")__rand".rand(1,11111111).".sql"; $backup_name = $backup_name ? $backup_name : $name.".sql"; header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"".$backup_name."\""); echo $content; exit; } ?> |