Backup baze s pomočjo PHP in FTP prenos na drug server

13.10.2008 | PHP, Programiranje

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.

Tagi: , , , , ,

Še ni komentarjev.

Komentiraj ...


 

October 2008
M T W T F S S
« Sep   Nov »
 12345
6789101112
13141516171819
20212223242526
2728293031  

Anketa

Uporabljate JS Framework?

Loading ... Loading ...
Wordle: Blog

Tagi