php使用mysqldunp完成數據庫備份(laravel框架)
在工作中遇到的問題,需要在後臺管理系統中添加一個數據庫備份的功能,參考了http://www.iteye.com/problems/90027問答,完成了需求,直接上代碼
/**
* 數據庫備份
* @param $_POST method分爲僅結構/結構和數據,tables需要備份的數據表(all 表示所有數據表)
* @author XJJ
* @email [email protected]
*/
function DBexport()
{
if(!empty($_POST))
{
$method = $_POST['method'];
$tables = $_POST['tables'];
$mysql = Config::get('database.connections.mysql'); //從配置文件中獲取數據庫信息
$filename=date("Y-m-d_H-i-s")."-".$mysql['database'].".sql"; //生成sql文件名
header("Content-disposition:filename=".$filename);
header("Content-type:application/octetstream");
header("Pragma:no-cache");
header("Expires:0");
$filepath = $_SERVER['DOCUMENT_ROOT'].RES_DB.$filename; //文件保存路徑
//根據參數執行mysqldump導出數據庫
if($method == "structure"){
//僅結構
if($tables == "all"){
exec("mysqldump -u".$mysql['username']." -p".$mysql['password']." --no-data --databases ".$mysql['database']." > ".$filepath);//所有表結構
}else{
exec("mysqldump -u".$mysql['username']." -p".$mysql['password']." --no-data --databases ".$mysql['database']." --tables ".$tables." > ".$filepath); //指定表結構
}
}else{
//結構和數據
if($tables == "all"){
exec("mysqldump -u".$mysql['username']." -p".$mysql['password']." --default-character-set=utf8 ".$mysql['database']." -n > ".$filepath); //所有表結構和數據
}else{
exec("mysqldump -u".$mysql['username']." -p".$mysql['password']." --default-character-set=utf8 ".$mysql['database']." -n --tables ".$tables." > ".$filepath); //指定表結構和數據
}
}
$file = fopen($filepath, "r"); //打開文件
echo fread($file,filesize($filepath));
fclose($file);
exit;
}
}
exec 函數可以執行外部程序,返回的字符串爲外部程序返回結果的最後一行
根據不同的情況使用不同的mysqldump導出sql文件即可,有什麼地方需要改進的還請各位大神指教
如果導出的sql文件過大出現無法導入的情況,可以修改mysql配置文件max_allowed_packet 允許導入的最大值