头像

ThinkPHP5 实现Mysql数据库备份

2017-09-22 16:39:33 来源:PHP代码   浏览()   评论 ( 0 )   

  ThinkPHP5 实现Mysql数据库备份

  public function exportDatabase(){
  header("Content-type:text/html;charset=utf-8");
  $path = RUNTIME_PATH.'mysql/';
  $database = config('database')['database'];
  //echo "运行中,请耐心等待...";
  $info = "-- ----------------------------\r\n";
  $info .= "-- 日期:".date("Y-m-d H:i:s",time())."\r\n";
  $info .= "-- MySQL - 5.5.52-MariaDB : Database - ".$database."\r\n";
  $info .= "-- ----------------------------\r\n\r\n";
  $info .= "CREATE DATAbase IF NOT EXISTS `".$database."` DEFAULT CHARACTER 
SET utf8 ;\r\n\r\n";
  $info .= "USE `".$database."`;\r\n\r\n";
  // 检查目录是否存在
  if(is_dir($path)){
  // 检查目录是否可写
  if(is_writable($path)){
  //echo '目录可写';exit;
  }else{
  //echo '目录不可写';exit;
  chmod($path,0777);
  }
  }else{
  //echo '目录不存在';exit;
  // 新建目录
  mkdir($path, 0777, true);
  //chmod($path,0777);
  }
  // 检查文件是否存在
  $file_name = $path.$database.'-'.date("Y-m-d",time()).'.sql';
  if(file_exists($file_name)){
  echo "数据备份文件已存在!";
  exit;
  }
  file_put_contents($file_name,$info,FILE_APPEND);
  //查询数据库的所有表
  $result = Db::query('show tables');
  //print_r($result);exit;
  foreach ($result as $k=>$v) {
  //查询表结构
  $val = $v['Tables_in_'.$database];
  $sql_table = "show create table ".$val;
  $res = Db::query($sql_table);
  //print_r($res);exit;
  $info_table = "-- ----------------------------\r\n";
  $info_table .= "-- Table structure for `".$val."`\r\n";
  $info_table .= "-- ----------------------------\r\n\r\n";
  $info_table .= "DROP TABLE IF EXISTS `".$val."`;\r\n\r\n";
  $info_table .= $res[0]['Create Table'].";\r\n\r\n";
  //查询表数据
  $info_table .= "-- ----------------------------\r\n";
  $info_table .= "-- Data for the table `".$val."`\r\n";
  $info_table .= "-- ----------------------------\r\n\r\n";
  file_put_contents($file_name,$info_table,FILE_APPEND);
  $sql_data = "select * from ".$val;
  $data = Db::query($sql_data);
  //print_r($data);exit;
  $count= count($data);
  //print_r($count);exit;
  if($count<1) continue;
  foreach ($data as $key => $value){
  $sqlStr = "INSERT INTO `".$val."` VALUES (";
  foreach($value as $v_d){
  $v_d = str_replace("'","\'",$v_d);
  $sqlStr .= "'".$v_d."', ";
  }
  //需要特别注意对数据的单引号进行转义处理
  //去掉最后一个逗号和空格
  $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2);
  $sqlStr .= ");\r\n";
  file_put_contents($file_name,$sqlStr,FILE_APPEND);
  }
  $info = "\r\n";
  file_put_contents($file_name,$info,FILE_APPEND);
  }
  echo "数据备份完成!";
  }


标签: phpmysql
声明:转载请注明来源(PHP代码)并保留原文链接:http://www.phpdaima.com//it-11.html
广告不存在
评论0

后面还有条评论,点击查看>>

温馨提示:为规范评论内容,垃圾评论一律封号...