數據庫備份的兩種方法是:1、使用mysqldump結合exec函數進行數據庫備份;2、使用【php+mysql+header】函數進行數據庫備份。
數據庫備份是必要的一般都是使用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:SQLdatabse_backup'; //定義數據庫配置 $user?=?'';?//數據庫賬戶 $pwd??=?'';?//數據庫密碼 $dbname?=?'';?//數據庫名稱 //備份數據庫命令地址文件 $sqladdress?=?'D:phpstudyMySQLinmysqldump.exe'; //備份指定地址 $time?=?time(); $path?=?'D:SQLdatabse_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; ";#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']."; ";#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); "; ????????unset($data); ????} ????$mysql.=" "; ????unset($t); } mysqli_close($con); $filename=date('Ymj').".sql";?//文件名為當天的日期 $time?=?time(); $path?=?'D:SQLdatabse_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下可以用定時任務。
更多SQL的相關技術文章,請訪問SQL教程欄目進行學習!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END