PHP 備份 MySQL資料庫

來源:互聯網
上載者:User

標籤:

  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資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.