標籤:
1 set_time_limit(0); 2 3 4 // 庫名 5 $db = ‘dbname‘; 6 7 8 9 /********** 串連 MySQL 資料庫 **********/ 10 11 $dsn = ‘mysql:dbname=‘.$db.‘;host=127.0.0.1‘; 12 13 $user = ‘root‘; 14 15 $password = ‘root‘; 16 17 18 try{ 19 20 $pdo = new PDO($dsn,$user,$password); 21 22 $pdo->exec(‘SET NAMES UTF8‘); 23 24 // 捕獲異常 25 $pdo->setAttribute(PDO::ATTR_ERRMODE,2); 26 27 }catch(PDOException $e){ 28 29 echo ‘Error: ‘.$e->getMessage(); 30 31 } 32 33 // 查詢多條資料 34 function query($sql){ 35 36 global $pdo; 37 38 $res = $pdo->prepare($sql); 39 $res->execute(); 40 $data = $res->fetchAll(PDO::FETCH_ASSOC); 41 42 return $data; 43 44 } 45 46 47 /********** 備份代碼 **********/ 48 49 50 // 查詢庫下所有表名稱 51 $sql = sprintf(‘SHOW TABLES FROM %s‘,$db); 52 $tablesData = query($sql); 53 54 // 庫中是否有表 55 if(count($tablesData) < 1){ 56 57 exit($db.‘ 庫中沒有資料表‘); 58 } 59 60 // 備份存放路徑 61 $dirPath = ‘backup‘; 62 63 // 判斷目錄是否存在 64 if(!file_exists($dirPath)){ 65 66 $res = mkdir($dirPath); 67 if($res !== true){ 68 69 exit(‘目錄建立失敗1‘); 70 } 71 } 72 73 // 當前日期 74 $toDir = date("Ymd",time()); 75 76 // 當前日期的備份目錄 77 $toDir = $dirPath.‘/‘.$toDir; 78 79 // 當前日期目錄是否存在 80 if(!file_exists($toDir)){ 81 82 // 建立以當前日期為名稱的目錄 83 $res = mkdir($toDir); 84 if($res !== true){ 85 86 exit(‘目錄建立失敗2‘); 87 } 88 } 89 90 // 如果目錄存在 產生備份的檔案名稱 91 if(file_exists($toDir)){ 92 93 $fileName = $toDir.‘/‘.date("Y-m-d_H-i-s",time()).‘.sql‘; 94 95 }else{ 96 97 exit(‘目錄建立失敗3‘); 98 } 99 100 // 迴圈資料101 foreach($tablesData as $key=>$val){102 103 // 表鍵名104 $tableKey = ‘Tables_in_‘.$db;105 106 // 擷取表結構107 $sql = sprintf(‘SHOW CREATE TABLE %s‘,$val[$tableKey]);108 $tableBody[$key] = query($sql);109 110 // 寫sql檔案到本地 ( 寫入表名稱 )111 error_log("\n\n\n# ".$tableBody[$key][0][‘Table‘],3,$fileName);112 113 // 如果存在則先刪除表114 $delTab = ‘DROP TABLE IF EXISTS `‘.$tableBody[$key][0][‘Table‘].‘`;‘;115 error_log("\n\n".$delTab,3,$fileName);116 117 // 寫入表結構 結尾多輸出一個; ( 分號 sql的結束符 )118 error_log("\n\n".$tableBody[$key][0][‘Create Table‘].";\n\n",3,$fileName);119 120 // 查詢表資料121 $sql = sprintf(‘SELECT * FROM %s‘,$val[$tableKey]);122 $tableData = query($sql);123 124 // 迴圈表中每條資料125 foreach($tableData as $k=>$v){126 127 $sqlHeadStr = ‘INSERT INTO ‘.$val[$tableKey];128 $keyStr = ‘‘;129 $valStr = ‘‘;130 131 // 迴圈insert的鍵和值132 foreach($v as $kk=>$vv){133 134 // 拼接鍵135 $keyStr .= ‘`‘.$kk.‘`,‘;136 // 拼接值137 $valStr .= ‘\‘‘.$vv.‘\‘,‘;138 }139 140 // 去除右側多餘逗號141 $keyStr = trim($keyStr,",");142 $valStr = trim($valStr,",");143 144 // 索引值添加括弧145 $keyStr = ‘(‘.$keyStr.‘)‘;146 $valStr = ‘(‘.$valStr.‘)‘;147 148 // 拼接完整sql149 $sqlStr = $sqlHeadStr.$keyStr.‘VALUES‘.$valStr.‘;‘;150 151 // 寫入 insert 語句到檔案152 error_log($sqlStr."\n",3,$fileName);153 }154 }155 156 echo ‘ok‘;157 exit;
PHP 備份 MySQL資料庫