Backup baze s pomočjo PHP in FTP prenos na drug server
Enkrat sem že pisal, kako je David elegantno rešil lopanje skozi tabele v bazi in tako kreiranje sql datoteke, ki vsebuje celotno mysql bazo oz. vse tabele, ki jih želimo. Sedaj je dodana še rešitev, da se to datoteko prenese na nek drug strežnik, kar je tudi najbolj smiselno, to lahko funkcija stori samodejno preko FTP protokola, vse kar morate storiti je, da vnesete pravilne podatke pri klicanju funkcije in backup je avtomatično prenesen na vpisan FTP strežnik.
Primer kode, ki stori vse zgoraj našteto:
[code]
function backup_tables($host,$user,$pass,$name,$tables = '*', $server, $ftp_user, $ftp_pass, $mapa_dest){
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
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);
for ($i = 0; $i < $num_fields; $i++){
$return.= 'DROP TABLE '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "\n\n".$row2[1].";\n\n";
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";
}
$file = 'db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql';
$handle = fopen($file,'w+');
fwrite($handle,$return);
fclose($handle);
$connection = ftp_connect($server);
$login = ftp_login($connection, $ftp_user, $ftp_pass);
if (!$connection || !$login) {
die('Napaka pri povezovanju!');
}
$upload = ftp_put($connection, "$mapa_dest$file", $file, FTP_ASCII);
if (!$upload) {
echo "Napaka pri prenosu na FTP strežnik!";
}
ftp_close($connection);
}
backup_tables('localhost','username','pass','baza', 'server', 'ftp_user', 'ftp_pass', 'neka/mapa/na/serverju/');
[/code]
Kodo lahko kasneje 1x dnevno poganjate preko cronjoba, ali pa jo poganjate sami po žeji, ko mislite, da backup ne bi škodil.
Še ni komentarjev.
Komentiraj ...

Anketa
Tagi
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.


