1. 程式人生 > >PHP備份資料庫

PHP備份資料庫

  

<?php
//每天早上備份一次 MySQL 資料庫並自動打包,同時刪除 5 天前的備份檔案 建議在本地執行沒有任何問題再傳到伺服器上 以後就可以新增計劃任務
////////////////////////*/
//儲存目錄,路徑要用反斜槓.您需要手動建立它.
//WinRAR.exe 要把壓縮包的exe檔案跟當前執行頁面放在同一個目錄,當然你也可以自己配置,這樣才能壓縮
ini_set("max_execution_time", "0");//程式碼執行時間不限制 防止備份失敗
ini_set('memory_limit', '128M');//設定記憶體 根據需求可以修改
date_default_timezone_set("PRC");
$store_folder = 'D:\workspace\www/code\sql_backup';
if(!file_exists($store_folder))
{
mkdir($store_folder);
}
//使用者名稱和密碼
//該帳號須有操作[所有]的資料庫及FILE的許可權

//否則有些資料庫不能備份.
$db_username = "root";
$db_password = "root";
$time=time();
$nowdir = $store_folder."\\".date("Ymd",$time)."";
$con = mysqli_connect("localhost", "root", "root");
if(!file_exists($nowdir))
{
mkdir($nowdir);
}
if(!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
echo "正在備份請勿關閉頁面....</br>";
ob_flush();
flush();
sleep(1);
//資料庫執行檔案地址
$mysqladdres='C:\program\DedeAMPZ\resources\app\bin\Mariadb\bin\mysqldump.exe';//我的伺服器是 phpmystudy 根據自己的情況設定
$res = mysqli_query($con,'show databases');
$data = array();
echo str_repeat(" ", 4096); //防止瀏覽器的快取
while ($row = mysqli_fetch_assoc($res))
{
$data[] = $row['Database'];
system ($mysqladdres.' --opt '."$row[Database] -u{$db_username} ".($db_password?"-p{$db_password}":"")." > $nowdir\\$row[Database].sql");
echo "dumping database `$row[Database]`...</br>";
ob_flush();
flush();
sleep(1);
}
echo "\nWinrar loading...</br> ";
//error handler function
function customError($errno, $errstr){
echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");
system("Z:\\Program Files\\WinRAR\\WinRAR.exe a -ep1 -r -o+ -m5 -df \"$nowdir.rar");
$rar="$store_folder\\".date("Ymd",$time-86400*5).".rar";
//刪除 5 天前的檔案
if(file_exists($rar))
{
@unlink($rar);
}
ob_flush();
flush();
sleep(1);
echo "\nOK!</br>";
mysqli_close($con);
ob_end_flush();
?>