thinkphp5實現mysql數據庫備份


其實備份數據庫說白了就是向一個.sql的文檔中寫入一條一條的sql命令

public function back()
   {

      $to_file_name="backsql.sql";
      //數據庫中有哪些表
      $tables=Db::query('SHOW TABLES ');
      $tablelist=array();
      foreach($tables as $v){
         foreach($v as $vv){
            $tablelist[]=$vv;
         }

      }
      echo "正在備份,請耐心等待...<br/>";
      $info = "-- ----------------------------\r\n";
      $info .= "-- 日期:".date("Y-m-d H:i:s",time())."\r\n";
      $info .= "-- 僅用於測試和學習,本程序不適合處理超大量數據\r\n";
      $info .= "-- ----------------------------\r\n\r\n";
      file_put_contents($to_file_name,$info,FILE_APPEND);
      //將每個表的表結構導出到文件
      foreach($tablelist as $val){

         $res = Db::query('show create table '.$val);


         foreach($res as $v){
            $newres=$v['Create Table'];
         }

         $info = "-- ----------------------------\r\n";
         $info .= "-- Table structure for `".$val."`\r\n";
         $info .= "-- ----------------------------\r\n";
         $info .= "DROP TABLE IF EXISTS `".$val."`;\r\n";
         $sqlStr = $info.$newres.";\r\n\r\n";
         //追加到文件
         file_put_contents($to_file_name,$sqlStr,FILE_APPEND);



      }

      //將每個表的數據導出到文件
      foreach($tablelist as $val){
         $sql = "select * from ".$val;
         $res = Db::query('select * from '.$val);

         //如果表中沒有數據,則繼續下一張表
         if(count($res)<1) continue;
         //
         $info = "-- ----------------------------\r\n";
         $info .= "-- Records for `".$val."`\r\n";
         $info .= "-- ----------------------------\r\n";
         file_put_contents($to_file_name,$info,FILE_APPEND);
         //讀取數據
        
         foreach($res as $v){
            $sqlstr="INSERT INTO `".$val."` VALUES (";
            foreach($v as $vv){
               //將數據中的單引號轉義,否則還原時會出錯
              $newvv= str_replace("'","\'",$vv);
               $sqlstr .="'".$newvv."', ";
            }
            //去掉最后一個逗號和空格
            $sqlstr = substr($sqlstr,0,strlen($sqlstr)-2);
            $sqlstr .= ");\r\n";
            file_put_contents($to_file_name,$sqlstr,FILE_APPEND);
         }


         file_put_contents($to_file_name,"\r\n",FILE_APPEND);
      }

      echo "OK!";




   }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM