php使用mysqldunp完成數據庫備份(laravel框架)

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 允許導入的最大值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章