天天看點

laravel 資料庫備份和資料恢複

/**
 * 資料備份
 */
public function save(){

    $DB_HOST = getenv('DB_HOST');
    $DB_DATABASE = getenv('DB_DATABASE'); //從配置檔案中擷取資料庫資訊
    $DB_USERNAME = getenv('DB_USERNAME');
    $DB_PASSWORD = getenv('DB_PASSWORD');

    $dumpfname = $DB_DATABASE . "_" . date("Y-m-d_H-i-s").".sql";
    $command = "D:\\phpStudy2016\\MySQL\\bin\\mysqldump --add-drop-table --host=$DB_HOST --user=$DB_USERNAME ";
    if ($DB_PASSWORD) $command.= "--password=". $DB_PASSWORD ." ";
    $command.= $DB_DATABASE;
    $command.= " > " . $dumpfname;
    system($command);
    return view("errors.503")->with('info','資料備份成功,在根目錄下'.$dumpfname)->with('url','/mysql/mysqlAdmin/index');
      

}

/**
 * 資料恢複
 * @param Request $request
 */
public function update_save(Request $request){
    $input = \Input::except('_token');

    $path = public_path();

    $file_name = $path.'\\'.$input['sql'];  //要導入的SQL檔案名
    $file_name = str_replace('\\','/',$file_name);
    //dd($file_name);

    $DB_HOST = getenv('DB_HOST');
    $DB_DATABASE = getenv('DB_DATABASE'); //從配置檔案中擷取資料庫資訊
    $DB_USERNAME = getenv('DB_USERNAME');
    $DB_PASSWORD = getenv('DB_PASSWORD');

    set_time_limit(0); //設定逾時時間為0,表示一直執行。當php在safe mode模式下無效,此時可能會導緻導入逾時,此時需要分段導入
    $fp = @fopen($file_name, "r") or die("不能打開SQL檔案 $file_name");//打開檔案
    //dd($fp);
    @mysql_connect($DB_HOST, $DB_USERNAME, $DB_PASSWORD) or die("不能連接配接資料庫 $DB_HOST");//連接配接資料庫
    @mysql_select_db($DB_DATABASE) or die ("不能打開資料庫 $DB_DATABASE");//打開資料庫

    echo "<p>正在清空資料庫,請稍等....<br>";
    $result = mysql_query("SHOW tables");
    //dd($result);
    while ($currow=mysql_fetch_array($result))
    {
        mysql_query("drop TABLE IF EXISTS $currow[0]");
        echo "清空資料表【".$currow[0]."】成功!<br>";
    }
    echo "<br>恭喜你清理MYSQL成功<br>";

    echo "正在執行導入資料庫操作<br>";
    // 導入資料庫的MySQL指令
    //echo "mysql -u$DB_USERNAME -p$DB_PASSWORD $DB_DATABASE < ".$file_name;
    //echo "source ".$file_name;
    //exec("source ".$file_name);
    $_sql = file_get_contents($file_name);
    $_arr = explode(';', $_sql);
    //dd($_arr);
    foreach ($_arr as $_value) {
        mysql_query("SET NAMES 'utf8'");
        mysql_query($_value.';');
    }
    echo "<br>導入完成!";
    mysql_close();