參考backup2mail,做了一些習慣上的修改!
說明
預設為備份至遠端FTP
想備份至mail的話,使用$_GET[b]為tomail。
PS. 其同目錄下,會保留一個最新的SQL備份檔!
程式碼
backup_mysql.php ※ 更改註解的地方,即可使用
error_reporting(E_ALL);
date_default_timezone_set("Asia/Taipei");
$db_server='localhost'; //MSYQL伺服器
$db_name='DBname'; //MSYQL名稱
$db_user='DBuser'; //MSYQL帳號
$db_pass='DBpass'; //MSYQL密碼
$to_mail='[email protected]'; //備份至信箱
$ftp_name='FTPname'; //備份至FTP名稱
$ftp_user='FTPuser'; //FTP帳號
$ftp_pass='FTPpass'; //FTP密碼
$file=$db_name.".".date('mdHi').".sql";
function db_dump() {
global $db_server, $db_name, $db_user, $db_pass, $file;
$cmd = 'mysqldump -u ' . $db_user . ' -h ' . $db_server . ' --password=' . $db_pass . ' ' . ($db_name == '' ? '--all-databases' : $db_name) . ' > ' . $file;
$dump_status = (passthru($cmd) === false) ? '失敗' : '成功';
echo $file.' 備份'.$dump_status;
return $dump_status;
}
echo '<h2>開始</h2>';
$dumped=db_dump();
$fp=fopen($file, 'r');
if($_GET[b]==tomail){
$read=fread($fp, filesize($file)); $read=chunk_split(base64_encode($read));
$boundary=uniqid("");
$headers='MIME-Version: 1.0'."\n";
$headers.='Content-type: multipart/mixed; boundary="'.$boundary.'"; charset="UTF-8"'."\n";
$headers.='From:'.$to_mail.'\n';
$body='--'.$boundary."\n";
$body.='Content-type: application/x-gzip; name='.$file."\n";
$body.='Content-transfer-encoding: base64'."\n";
$body.='Content-disposition: attachment; filename='.$file."\n\n";
$body.=$read ."\n";
$body.="--$boundary--";
if(mail($to, $subject, $body, $headers)){
echo ",已寄至信箱。"; }else{ echo ",信件發送失敗!";
}
}else{
$conn=ftp_connect($ftp_name, 21, 60);
$login_result = ftp_login($conn, $ftp_user, $ftp_pass);
ftp_pasv($conn, true);
if(ftp_fput($conn, $file, $fp, FTP_ASCII)){
echo ",上傳成功。";
} else {
echo ",上傳失敗!";
}
ftp_close($conn);
}
fclose($fp);
rename($file,"backup.sql");
補充
如果要定時自動備份的話,
可以自行使用主機後台的CRON定時排程去瀏覽PHP即可。
