更新時(shí)間:2021-08-16 10:30:20 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1553次
數(shù)據(jù)庫(kù)備份是必要的一般都是使用mysqldump進(jìn)行備份,我這邊寫了兩種備份方法可以參考一下。
第一種:使用mysqldump結(jié)合exec函數(shù)進(jìn)行數(shù)據(jù)庫(kù)備份操作。
代碼如下:
/**
* Subject: php-mysql 實(shí)現(xiàn)數(shù)據(jù)庫(kù)備份.
* User: luokakale
* Date: 2018/11/9
* Time: 13:31
*/
header('Content-Type:text/html;charset=utf8');
ini_set("max_execution_time", "0");//代碼運(yùn)行時(shí)間不限制 防止備份失敗
ini_set('memory_limit', '128M');//設(shè)置內(nèi)存 根據(jù)需求可以修改
date_default_timezone_set("PRC");
//創(chuàng)建需要保存sql文件的文件夾
$path = 'D:\SQL\databse_backup';
//定義數(shù)據(jù)庫(kù)配置
$user = ''; //數(shù)據(jù)庫(kù)賬戶
$pwd = ''; //數(shù)據(jù)庫(kù)密碼
$dbname = ''; //數(shù)據(jù)庫(kù)名稱
//備份數(shù)據(jù)庫(kù)命令地址文件
$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);
}
//備份的數(shù)據(jù)庫(kù)文件名
$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;
//執(zhí)行命令
exec($order);
我們使用的是集成的phpstudy里面的mysql下面的mysqldump.exe來備份,備份的數(shù)據(jù)庫(kù)名字寫法是 數(shù)據(jù)庫(kù)名字+年月日時(shí). 上面代碼中我對(duì)數(shù)據(jù)庫(kù)密碼進(jìn)行了判斷,這邊有些數(shù)據(jù)庫(kù)是不需要密碼的。最后使用exec執(zhí)行命令。
第二種:使用php+mysql+header函數(shù)進(jìn)行數(shù)據(jù)庫(kù)備份和下載操作。
代碼如下:
header('Content-Type:text/html;charset=utf8');
ini_set("max_execution_time", "0");//代碼運(yùn)行時(shí)間不限制 防止備份失敗
ini_set('memory_limit', '1024M');//設(shè)置內(nèi)存 根據(jù)需求可以修改
date_default_timezone_set("PRC");
header("Content-Type:text/html;charset=utf-8");
$host="";
$user="";//賬戶
$password="";//密碼
$dbname="";//數(shù)據(jù)庫(kù)名稱
$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"; //文件名為當(dāng)天的日期
$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 進(jìn)行輸出,否則下載的文家是空白的
echo fread($fp,$file_size);
fclose($fp);
exit;
建議用第一種,第二種太消耗內(nèi)存了。
第一種可以做成定時(shí)備份,windows下可以用定時(shí)任務(wù)。
以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"SQL數(shù)據(jù)庫(kù)備份的兩種方法",希望對(duì)大家有幫助,想了解更多可查看數(shù)據(jù)庫(kù)教程。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)