zoukankan      html  css  js  c++  java
  • 数据管理只有选择备份到服务器,才能使用分卷备份功能

    <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <link type="text/css教程" rel="stylesheet" href="common/control.css">
    <script type="text/网页特效" language="javascript" src="common/admin.otable.js"></script>
    <script type="text/javascript" language="javascript" src="common/include.func.js"></script>
    <title>数据管理</title>
    <style type="text/css">
    span {padding-left:8px;}
    </style>
    </head>

    <body class="contentbody">
    <div class="maindiv">
    <span class="ctitle">esweb系统数据管理</span>
    <ul class="cmenu">
     <li><a href="sql_backup.php">数据备份</a></li>
        <li><a href="sql_restore.php">数据还原</a></li>
     <li><a href="sql_optimize.php">数据优化</a>
    </ul>

    <div class="concontent">
    <?php

    /*--------------界面--------------*/if(!$_post['act']){/*----------------------*/
    $msgs[]="服务器备份目录为$backup";
    $msgs[]="对于较大的数据表,强烈建议使用分卷备份";
    $msgs[]="只有选择备份到服务器,才能使用分卷备份功能";
    //show_msg($msgs);
    ?>
    <div class="thead"><span class="left"><img src="images/icon2/into.gif" align="absmiddle" /> 如果需要备份、还原或者优化<font color="red"> 大量的数据 </font>, 推荐使用"<a href="http://www.phome.net/ebak2010/" target="_blank">帝国备份王2010</a>"</span> <span class="right"></span></div>
    <form name="myform" method="post" action="sql_backup.php">
    <table cellpadding="" cellspacing="0" border="0" width="100%" class="ctable" id="otable" align="center">
    <tr>
     <th colspan="2">esweb系统数据备份</th>
    </tr>
    <tr>
     <td align="right" width="250">选择备份方式</td>
        <td><input type="radio" name="bfzl" value="quanbubiao" checked="checked" />备份全部数据 
        <input type="radio" name="bfzl" value="danbiao" />备份单张表数据  
        <select name="tablename"><option value="">请选择</option>
        <?php
        $d->query("show table status from $mysqldb");
        while($d->nextrecord()){
        echo "<option value='".$d->f('name')."'>".$d->f('name')."</option>";}
        ?>
        </select></td>
    </tr>
    <tr>
     <td align="right">选择目标位置</td>
        <td><input type="radio" name="weizhi" value="server" checked="checked" />备份到服务器 
        <input type="radio" name="weizhi" value="localpc" />备份到本地</td>
    </tr>

    <tr>
     <td align="right">使用分卷备份</td>
        <td><input type="checkbox" name="fenjuan" value="yes" checked="checked" />
        分卷备份 <input name="filesize" type="text" value="1260" size="10" class="text2" /> k <span>(只有选择备份到服务器,才能使用分卷备份功能)</span></td>
    </tr>
    <tr>
     <td align="right">程序说明</td>
        <td>1.对于较大的数据表,强烈建议使用分卷备份.
        <br>2.只有选择备份到服务器,才能使用分卷备份功能.
        </td>
    </tr>
    <tr>
     <td align="center" colspan="2"><input type="submit" id="act" name="act" value="备 份" class="button" /> <input type="reset" value="重 置" class="button" /></td>
    </tr>
    </table>
    </form>
    <?php /*-------------界面结束-------------*/}/*---------------------------------*/
    /*----*/else{/*--------------主程序-----------------------------------------*/
    if($_post['weizhi']=="localpc"&&$_post['fenjuan']=='yes')
    {$msgs[]="只有选择备份到服务器,才能使用分卷备份功能";
    show_msg($msgs); pageend();}
    if($_post['fenjuan']=="yes"&&!$_post['filesize'])
    {$msgs[]="您选择了分卷备份功能,但未填写分卷文件大小";
    show_msg($msgs); pageend();}
    if($_post['weizhi']=="server"&&!writeable($backup))
    {$msgs[]="备份文件存放目录'$backup'不可写,请修改目录属性";
    show_msg($msgs); pageend();}

    /*----------备份全部表-------------*/if($_post['bfzl']=="quanbubiao"){/*----*/
    /*----不分卷*/if(!$_post['fenjuan']){/*--------------------------------*/
    if(!$tables=$d->query("show table status from $mysqldb"))
    {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}
    $sql="";
    while($d->nextrecord($tables))
    {
    $table=$d->f("name");
    $sql.=make_header($table);
    $d->query("select * from $table");
    $num_fields=$d->nf();
    while($d->nextrecord())
    {$sql.=make_record($table,$num_fields);}
    }
    $filename=date("ymd",time())."_all.sql";
    if($_post['weizhi']=="localpc") down_file($sql,$filename);
    elseif($_post['weizhi']=="server")
    {if(write_file($sql,$filename))
    $msgs[]="全部数据表数据备份完成,生成备份文件'$backup/$filename'";
    else $msgs[]="备份全部数据表失败";
    show_msg($msgs);
    pageend();
    }
    /*-----------------不要卷结束*/}/*-----------------------*/
    /*-----------------分卷*/else{/*-------------------------*/
    if(!$_post['filesize'])
    {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}
    if(!$tables=$d->query("show table status from $mysqldb"))
    {$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}
    $sql=""; $p=1;
    $filename=date("ymd",time())."_all";
    while($d->nextrecord($tables))
    {
    $table=$d->f("name");
    $sql.=make_header($table);
    $d->query("select * from $table");
    $num_fields=$d->nf();
    while($d->nextrecord())
    {$sql.=make_record($table,$num_fields);
    if(strlen($sql)>=$_post['filesize']*1000){
         $filename.=("_v".$p.".sql");
         if(write_file($sql,$filename))
         $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";
         else $msgs[]="备份表-".$_post['tablename']."-失败";
         $p++;
         $filename=date("ymd",time())."_all";
         $sql="";}
    }
    }
    if($sql!=""){$filename.=("_v".$p.".sql");  
    if(write_file($sql,$filename))
    $msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";}
    show_msg($msgs);
    /*---------------------分卷结束*/}/*--------------------------------------*/
    /*--------备份全部表结束*/}/*---------------------------------------------*/

    /*--------备份单表------*/elseif($_post['bfzl']=="danbiao"){/*------------*/
    if(!$_post['tablename'])
    {$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();}
    /*--------不分卷*/if(!$_post['fenjuan']){/*-------------------------------*/
    $sql=make_header($_post['tablename']);
    $d->query("select * from ".$_post['tablename']);
    $num_fields=$d->nf();
    while($d->nextrecord())
    {$sql.=make_record($_post['tablename'],$num_fields);}
    $filename=date("ymd",time())."_".$_post['tablename'].".sql";
    if($_post['weizhi']=="localpc") down_file($sql,$filename);
    elseif($_post['weizhi']=="server")
    {if(write_file($sql,$filename))
    $msgs[]="表-".$_post['tablename']."-数据备份完成,生成备份文件'$backup/$filename'";
    else $msgs[]="备份表-".$_post['tablename']."-失败";
    show_msg($msgs);
    pageend();
    }
    /*----------------不要卷结束*/}/*------------------------------------*/
    /*----------------分卷*/else{/*--------------------------------------*/
    if(!$_post['filesize'])
    {$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}
    $sql=make_header($_post['tablename']); $p=1; 
    $filename=date("ymd",time())."_".$_post['tablename'];
    $d->query("select * from ".$_post['tablename']);
    $num_fields=$d->nf();
    while ($d->nextrecord()) 

        $sql.=make_record($_post['tablename'],$num_fields);
          if(strlen($sql)>=$_post['filesize']*1000){
         $filename.=("_v".$p.".sql");
         if(write_file($sql,$filename))
         $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";
         else $msgs[]="备份表-".$_post['tablename']."-失败";
         $p++;
         $filename=date("ymd",time())."_".$_post['tablename'];
         $sql="";}
    }
    if($sql!=""){$filename.=("_v".$p.".sql");  
    if(write_file($sql,$filename))
    $msgs[]="表-".$_post['tablename']."-卷-".$p."-数据备份完成,生成备份文件'$backup/$filename'";}
    show_msg($msgs);
    /*----------分卷结束*/}/*--------------------------------------------------*/
    /*----------备份单表结束*/}/*----------------------------------------------*/

    /*---*/}/*-------------主程序结束------------------------------------------*/

    function write_file($sql,$filename)
    {
    $re=true;
    global $backup;
    if(!@$fp=fopen($backup."/".$filename,"w+")) {$re=false; echo "failed to open target file";}
    if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";}
    if(!@fclose($fp)) {$re=false; echo "failed to close target file";}
    return $re;
    }

    function down_file($sql,$filename)
    {
    ob_end_clean();
    header("content-encoding: none");
    header("content-type: ".(strpos($_server['http_user_agent'], 'msie') ? 'application/octetstream' : 'application/octet-stream'));
       
    header("content-disposition: ".(strpos($_server['http_user_agent'], 'msie') ? 'inline; ' : 'attachment; ')."filename=".$filename);
       
    header("content-length: ".strlen($sql));
    header("pragma: no-cache");
       
    header("expires: 0");
    echo $sql;
    $e=ob_get_contents();
    ob_end_clean();
    }

    function writeable($dir)
    {

    if(!is_dir($dir)) {
    @mkdir($dir, 0777);
    }

    if(is_dir($dir)) 
    {

    if($fp = @fopen("$dir/test.test", 'w'))
        {
    @fclose($fp);
    @unlink("$dir/test.test");
    $writeable = 1;

    else {
    $writeable = 0;
    }

    }

    return $writeable;

    }

    function make_header($table)
    {global $d;
    $sql="drop table if exists ".$table."n";
    $d->query("show2881064151 create table ".$table);
    $d->nextrecord();
    $tmp=preg_replace("/n/","",$d->f("create table"));
    $sql.=$tmp."n";
    return $sql;
    }

    function make_record($table,$num_fields)
    {global $d;
    $comma="";
    $sql .= "insert into ".$table." values(";
    for($i = 0; $i < $num_fields; $i++) 
    {$sql .= ($comma."'".mysql_escape_string($d->record[$i])."'"); $comma = ",";}
    $sql .= ")n";
    return $sql;
    }

    function show_msg($msgs)
    {
    $title="提示:";
    echo "<table width='100%' border='0' cellpadding='0' cellspacing='0'>";
    echo "<tr><td>".$title."</td></tr>";
    echo "<tr><td><br><ul>";
    while (list($k,$v)=each($msgs))
    {
    echo "<li>".$v."</li>";
    }
    echo "</ul></td></tr></table>";
    }

    function pageend()
    {
    exit();
    }
    ?>
    </div><br /><br />

    </div>

    </div>
    </body>
    </html>

    class db{

    var $linkid;
    var $sqlid;
    var $record;

    function db($host="",$username="",$password="",$database="")
    {
    if(!$this->linkid)    @$this->linkid = mysql_connect($host, $username, $password) or die("连接服务器失败.");
    @mysql_select_db($database,$this->linkid) or die("无法打开数据库");
    return $this->linkid;}

    function query($sql)
    {if($this->sqlid=mysql_query($sql,$this->linkid)) return $this->sqlid;
    else {
        $this->err_report($sql,mysql_error);
    return false;}
    }

    function nr($sql_id="")
    {if(!$sql_id) $sql_id=$this->sqlid;
    return mysql_num_rows($sql_id);}

    function nf($sql_id="")
    {if(!$sql_id) $sql_id=$this->sqlid;
    return mysql_num_fields($sql_id);}

    function nextrecord($sql_id="")
    {if(!$sql_id) $sql_id=$this->sqlid;
    if($this->record=mysql_fetch_array($sql_id))    return $this->record;
    else return false;
    }

    function f($name)
    {
    if($this->record[$name]) return $this->record[$name];
    else return false;
    }

    function close() {mysql_close($this->linkid);}

    function lock($tblname,$op="write")
    {if(mysql_query("lock tables ".$tblname." ".$op)) return true; else return false;}

    function unlock()
    {if(mysql_query("unlock tables")) return true; else return false;}

    function ar() {
          return @mysql_affected_rows($this->linkid);
        }

    function i_id() {
        return mysql_insert_id();
    }

    function err_report($sql,$err)
    {
    echo "mysql查询错误<br>";
    echo "查询语句:".$sql."<br>";
    echo "错误信息:".$err;
    }
    /****************************************类结束***************************/


    global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb, $backup;
    $mysqlhost = $mydbhost;          //host name
    $mysqluser = $mydbuser;          //login name
    $mysqlpwd = $mydbpw;             //password
    $mysqldb = $mydbname;            //name of database

    $d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb);
    $d->query("set names 'utf8'");

  • 相关阅读:
    函数的存储 堆和栈
    函数的容错处理 函数的返回值
    Linux启动故障排查和修复技巧
    干货 | 亿级Web系统负载均衡几种实现方式
    利用expect批量修改Linux服务器密码
    干货 | LVM快照学习
    实战 | Linux根分区扩容
    LVM 逻辑卷学习
    Shell脚本实战:日志关键字监控+自动告警
    手把手教你在Linux中快速检测端口的 3 个小技巧
  • 原文地址:https://www.cnblogs.com/cbryge/p/5995332.html
Copyright © 2011-2022 走看看