Window环境下执行php定时任务备份数据库,操作文件

6 篇文章 0 订阅

      最近在做的一个项目,客户是属于企事业单位;有专门的机房,项目的访问都是通过内网,服务器上部署的是window环境,开发过程中提到备份数据库的问题;之前做的项目开发,更多都是在Linux环境下,这次不是,最初是比较迷茫的,后来翻阅了一些资料,找到了解决方法,原来和设置自动关机查不了多少,比较简单;

      本地的环境是win10,客户服务器是win7,不过大差不差。主要几步是一致的。废话不多说,讲方法;

控制面板  -》系统与安全->管理工具/计划任务  
创建任务    常规:填写名称  使用最高权限运行(考虑到文件权限问题);
                触发器:新建   按预定计划 每天 
                操作  新建  脚本或程序   C:\wamp64\bin\php\php7.1.22\php.exe -f   C:\wamp64\www\objectives\Application\Admin\Contrab\DataBack.class.php   
                操作的解释(第一个参数是php环境变量  -f   第三个是要执行的php文件,每个地方都要是本机对应的数据,位置)

Databack.class.php代码

<?php
header("Content-type:text/html;charset=utf-8");

//配置信息
$cfg_dbhost = '127.0.0.1';//修改成自己的服务器地址
$cfg_dbname = '你的数据库名称';
$cfg_dbuser = 'root';
$cfg_dbpwd = '';
$cfg_db_language = 'utf8';
$to_file_name = date("Ymd")."objectives.sql";
// END 配置
//链接数据库
$link = mysqli_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd,$cfg_dbname);
//选择编码
mysqli_set_charset($link,$cfg_db_language);
//数据库中有哪些表
$tables = mysqli_query($link,"show tables");
//die(var_dump($tables));
//将这些表记录到一个数组
$tabList = array();
while($row = mysqli_fetch_row($tables)){
    $tabList[] = $row[0];
}


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($tabList as $val){
    $sql = "show create table ".$val;
    $res = mysqli_query($link,$sql);
    $row = mysqli_fetch_array($res);
    $info = "-- ----------------------------\r\n";
    $info .= "-- Table structure for `".$val."`\r\n";
    $info .= "-- ----------------------------\r\n";
    $info .= "DROP TABLE IF EXISTS `".$val."`;\r\n";
    $sqlStr = $info.$row[1].";\r\n\r\n";
//追加到文件
    file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
//释放资源
    mysqli_free_result($res);
}
//将每个表的数据导出到文件
foreach($tabList as $val){
    $sql = "select * from ".$val;
    $res = mysqli_query($link,$sql);
//如果表中没有数据,则继续下一张表
    if(mysqli_num_rows($res)<1) continue;
//
    $info = "-- ----------------------------\r\n";
    $info .= "-- Records for `".$val."`\r\n";
    $info .= "-- ----------------------------\r\n";
    file_put_contents($to_file_name,$info,FILE_APPEND);
//读取数据
    while($row = mysqli_fetch_row($res)){
        $sqlStr = "INSERT INTO `".$val."` VALUES (";
        foreach($row as $zd){
            $sqlStr .= "'".$zd."', ";
        }
//去掉最后一个逗号和空格
        $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2);
        $sqlStr .= ");\r\n";
        file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
    }
//释放资源
    mysqli_free_result($res);
    file_put_contents($to_file_name,"\r\n",FILE_APPEND);
}

 

 在不指定保存目录的前提下,执行后生成的文件在C://system32/目录下

另外,服务的缓存文件夹一直在扩充,同时加上了定时清空缓存文件夹的操作。

$dir = 'D:\PHPTutorial\WWW\objectives\sessions';//绝对地址
$dh=opendir($dir);
while ($file=readdir($dh)) {
    if($file!="." && $file!="..") {
        $fullpath=$dir."/".$file;
        if(!is_dir($fullpath)) {
            unlink($fullpath);
        }
    }
}
closedir($dh);
//注缓存文件夹只有一级,没有做更多的操作,如果是多级,可以写成方法;
//function deldir($dir) { 
//先删除目录下的文件: 
/*  $dh=opendir($dir); 
while ($file=readdir($dh)) { 
   if($file!="." && $file!="..") { 
         $fullpath=$dir."/".$file; 
         if(!is_dir($fullpath)) { 
            unlink($fullpath); 
         }else { 
           deldir($fullpath); 
         } 
    } 
} 
closedir($dh); 
//删除当前文件夹: 
    if(rmdir($dir)) { 
       return true; 
    } else { 
       return false; 
    } 
} *
//删除文件夹方法转载自  /https://m.jb51.net/article/33463.htm

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值