1. 程式人生 > >資料庫備份的兩種方法

資料庫備份的兩種方法

資料庫備份是必要的一般都是使用mysqldump進行備份,我這邊寫了兩種備份方法可以參考一下。

第一種:使用mysqldump結合exec函式進行資料庫備份操作。

程式碼如下:

/**
 * Subject: php-mysql 實現資料庫備份.
 * User: luokakale
 * Date: 2018/11/9
 * Time: 13:31
 */

header('Content-Type:text/html;charset=utf8');
ini_set("max_execution_time", "0");//程式碼執行時間不限制  防止備份失敗
ini_set('memory_limit', '128M');//
設定記憶體 根據需求可以修改 date_default_timezone_set("PRC"); //建立需要儲存sql檔案的資料夾 $path = 'D:\SQL\databse_backup'; //定義資料庫配置 $user = ''; //資料庫賬戶 $pwd = ''; //資料庫密碼 $dbname = ''; //資料庫名稱 //備份資料庫命令地址檔案 $sqladdress = 'D:\phpStudy\MySQL\bin\mysqldump.exe'; //備份指定地址 $time = time(); $path = 'D:\SQL\databse_backup'.'\\'.date("Ymd",$time
); if(!file_exists($path)) { mkdir($path,0777,true); } //備份的資料庫檔名 $sqlFile = $dbname."_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%.sql"; //判斷是否存在密碼 $password = $pwd== ''?'':' -p'.$pwd; //拼接備份命令 $order = $sqladdress.' --opt -u'.$user.$password.' '.$dbname.' >'.$path.'\\'.$sqlFile; //執行命令 exec($order
);

我使用的是整合的phpstudy裡面的mysql下面的mysqldump.exe來備份,備份的資料庫名字寫法是 資料庫名字+年月日時.  上面程式碼中我對資料庫密碼進行了判斷,我這邊有些資料庫是不需要密碼的。最後使用exec執行命令。

第二種:使用php+mysql+header函式進行資料庫備份和下載操作。

程式碼如下:

header('Content-Type:text/html;charset=utf8');
ini_set("max_execution_time", "0");//程式碼執行時間不限制  防止備份失敗
ini_set('memory_limit', '1024M');//設定記憶體 根據需求可以修改
date_default_timezone_set("PRC");
header("Content-Type:text/html;charset=utf-8");
$host="";
$user="";//賬戶
$password="";//密碼
$dbname="";//資料庫名稱
$con =  mysqli_connect("$host","$user","$password","$dbname");
mysqli_select_db($con,$dbname);
$mysql= "set charset utf8;\r\n";#for mysql>=5.0
mysqli_query($con,"SET NAMES 'UTF8'");
$q1=mysqli_query($con,"show tables");
while($t=mysqli_fetch_array($q1)){
    $table=$t[0];
    $q2=mysqli_query($con,"show create table `$table`");
    $sql=mysqli_fetch_array($q2);
    $mysql.=$sql['Create Table'].";\r\n\r\n";#DDL
    $q3=mysqli_query($con,"select * from `$table`");
    while($data=mysqli_fetch_assoc($q3))
    {
        $keys=array_keys($data);
        $keys=array_map('addslashes',$keys);
        $keys=join('`,`',$keys);
        $keys="`".$keys."`";
        $vals=array_values($data);
        $vals=array_map('addslashes',$vals);
        $vals=join("','",$vals);
        $vals="'".$vals."'";
        $mysql.="insert into `$table`($keys) values($vals);\r\n";
        unset($data);
    }
    $mysql.="\r\n";
    unset($t);
}
mysqli_close($con);
$filename=date('Ymj').".sql"; //檔名為當天的日期
$time = time();
$path = 'D:\SQL\databse_backup'.'\\'.date("Ymd",$time).'\\';
// 檢查目錄是否存在
if(!is_dir($path)){
    // 新建目錄
    mkdir($path, 0777, true);
}
$file_name = $path.$filename;
$fp = fopen($file_name,'w');
fputs($fp,$mysql);
fclose($fp);
$fp=fopen($file_name,"r");
$file_size=filesize($file_name);
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".$file_size);
header("Content-Disposition: attachment; filename=".$filename);
//這裡一定要使用echo 進行輸出,否則下載的文家是空白的
echo fread($fp,$file_size);
fclose($fp);
exit;

個人建議用第一種,第二種太消耗記憶體了。

第一種可以做成定時備份,windows下可以用定時任務。

本文屬原創內容,為了尊重他人勞動,轉載請註明本文地址:

https://www.cnblogs.com/luokakale/p/9935772.html