Regelbunden säkerhetskopiering av databas är en mycket viktig uppgift för utvecklare. Det förhindrar risken att förlora data som om något problem uppstår på servern som hacking eller serverkrasch. Så du måste ställa in schemalagd databassäkerhetskopiering för att förhindra framtida dataförlust.
Du kan ta backup av mysql-databas på många sätt. Du kan logga in direkt på din värd-cpanel och ta fullständig säkerhetskopiering med bara några klick, men om du inte har tillgång till cpanel kan du skapa ett enkelt PHP-skript och ställa in det på schemalagd säkerhetskopiering. Så i det här inlägget kommer jag att dela med mig av följande användbara PHP-skript för att säkerhetskopiera/exportera MySql-databas.
Använd följande PHP-skript för att säkerhetskopiera Mysql-databas
<?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; } ?> |