tp3.2之備份數據庫

原文鏈接:https://blog.csdn.net/qq_35835160/article/details/89469081

參考網址
https://blog.csdn.net/qq_35835160/article/details/89469081

注意
導出來的sql,要在正確庫名裏面導入
在這裏插入圖片描述

代碼

<?php
/**
* 導出數據庫備份
* 2016-12-27
*/
header("Content-type:text/html;charset=utf-8");
$path = C('ROOT_MYSQL_PATH');                   // 存儲到項目根目錄
// $path = 'E:\phpstudy2018\PHPTutorial\WWW\sql_copy';  // 本地自定義路徑
//線上的這個存儲地址,標籤不一樣,所以線上的下面拼接文件名的時候不用加轉義
// $path = '/www/data/upload/sql_copy'; 

$model = M();
//查詢所有表
$sql="show tables";
$result=$model->query($sql);

//print_r($result);exit;
//echo "運行中,請耐心等待...<br/>";

$info = "-- ----------------------------\r\n";
$info .= "-- 日期:".date("Y-m-d H:i:s",time())."\r\n";
$info .= "-- MySQL - 5.1.73 : Database - ".C('DB_NAME')."\r\n";
$info .= "-- ----------------------------\r\n\r\n";
$info .= "CREATE DATAbase IF NOT EXISTS `".C('DB_NAME')."` DEFAULT CHARACTER SET utf8 ;\r\n\r\n";
$info .= "USE `".C('DB_NAME')."`;\r\n\r\n";
// 檢查目錄是否存在
if(is_dir($path)){
    //echo '目錄存在';
    // 檢查目錄是否可寫
    if(is_writable($path)){
      //echo '目錄可寫';exit;
    }else{
      echo '目錄不可寫';exit;
      //chmod($path,0777);
    }
}else{
    //echo '目錄不存在';exit;
    // 新建目錄
    mkdir($path, 0777, true);
    //chmod($path,0777);
}

// 檢查文件是否存在
$file_name = $path.C('DB_NAME').'-'.date("Y-m-d",time()).'.sql';
//$file_name = $path.'\/'.C('DB_NAME').'-'.date("Y-m-d",time()).'.sql';   對應本地自定義路徑
//$file_name = $path.'/'.C('DB_NAME').'-'.date("Y-m-d",time()).'.sql';    對應線上

if(file_exists($file_name)){
    echo "數據備份文件已存在!";
    exit;
}

file_put_contents($file_name,$info,FILE_APPEND);

foreach ($result as $k=>$v) {
	    //查詢表結構
	    $val = $v['tables_in_'.C('DB_NAME')];
	    $sql_table = "show create table ".$val;
	    $res = $model->query($sql_table);
	    //print_r($res);exit;
	    $info_table = "-- ----------------------------\r\n";
	    $info_table .= "-- Table structure for `".$val."`\r\n";
	    $info_table .= "-- ----------------------------\r\n\r\n";
	    $info_table .= "DROP TABLE IF EXISTS `".$val."`;\r\n\r\n";
	    $info_table .= $res[0]['create table'].";\r\n\r\n";
	    //查詢表數據
	    $info_table .= "-- ----------------------------\r\n";
	    $info_table .= "-- Data for the table `".$val."`\r\n";
	    $info_table .= "-- ----------------------------\r\n\r\n";
	
	    file_put_contents($file_name,$info_table,FILE_APPEND);
	    
	    $sql_data = "select * from ".$val;
	    $data = $model->query($sql_data);
	    //print_r($data);exit;
	    $count= count($data);
	    //print_r($count);exit;
	    if($count<1) continue;
	    
	    foreach ($data as $key => $value){
	        $sqlStr = "INSERT INTO `".$val."` VALUES (";
	        foreach($value as $v_d){
	            $v_d = str_replace("'","\'",$v_d);
	            $sqlStr .= "'".$v_d."', ";
	        }
	        //需要特別注意對數據的單引號進行轉義處理
	        //去掉最後一個逗號和空格
	        $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2);
	        $sqlStr .= ");\r\n";
	        file_put_contents($file_name,$sqlStr,FILE_APPEND);
	    }
	    $info = "\r\n";
	    file_put_contents($file_name,$info,FILE_APPEND);
}
	echo "OK!";
	

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