ThinkPHP 实现Mysql数据库备份

8 篇文章 0 订阅
5 篇文章 0 订阅
    /**
     * 导出数据库备份
     * baikeliang
     * 2016-12-27
     */
    public function exportDatabase(){
    header("Content-type:text/html;charset=utf-8");
    $path = C('ROOT_MYSQL_PATH');
    $model = M();
    //查询所有表
    $sql="show tables";
    $result=$model->query($sql);
    //print_r($result);exit;
    //echo "运行中,请耐心等待...<br/>";
    $info  = "-- ----------------------------\r\n";
    $info .= "-- 日期:".date("Y-m-d H:i:s",time())."\r\n";
    $info .= "--  MySQL - 5.1.73 : Database - ".C('DB_NAME')."\r\n";
    $info .= "-- ----------------------------\r\n\r\n";
    $info .= "CREATE DATABASE IF NOT EXISTS `".C('DB_NAME')."` DEFAULT CHARACTER SET utf8 ;\r\n\r\n";
    $info .= "USE `".C('DB_NAME')."`;\r\n\r\n";
    // 检查目录是否存在
    if(is_dir($path)){
    //echo '目录存在';
    // 检查目录是否可写
    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.C('DB_NAME').'-'.date("Y-m-d",time()).'.sql';
    if(file_exists($file_name)){
    echo "数据备份文件已存在!";
    exit;
    }
    file_put_contents($file_name,$info,FILE_APPEND);
    foreach ($result as $k=>$v) {
    //查询表结构
    $val = $v['tables_in_'.C('DB_NAME')];
    $sql_table = "show create table ".$val;
    $res = $model->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 = $model->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 "OK!";
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值