首页 > 技术文章 > thinkphp5实现mysql数据库备份

jcydd 2017-08-04 23:29 原文

其实备份数据库说白了就是向一个.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!";




   }

 

推荐阅读