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!";




   }

 

转载于:https://www.cnblogs.com/jcydd/p/7287878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值