參考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即可。