php mysql 数据库备份程序

 代码如下 复制代码

?>
<!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." ";
$d->query("show create table ".$table);
$d->nextrecord();
$tmp=preg_replace("/ /","",$d->f("create table"));
$sql.=$tmp." ";
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 .= ") ";
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'");

时间: 2024-10-29 22:29:23

php mysql 数据库备份程序的相关文章

php 导出.sql文件/mysql数据库备份程序

<?php $database='';//数据库名 $options=array(     'hostname' => '',//ip地址     'charset' => 'utf8',//编码     'filename' => $database.'.sql',//文件名     'username' => '',     'password' => '' ); mysql_connect($options['hostname'],$options['userna

MySQL 数据库备份恢复和乱码问题 续

在我转到wordpress之后第一个考虑的是它的数据库备份恢复问题,因为写bloger都知道,自己的blog记录的都是自己需要的宝贵的资料和文字,如果因为各种未知因素导致数据库崩溃或者空间商出了问题,丢失了数据的话,无疑是一种非常巨大的痛苦和损失. 所以在我blog里面有好几篇资料文章或者自己心得文章来讨论mysql数据库备份恢复和乱码问题. 之前那些文章讨论结果已经暂时能满足我数据库备份和恢复问题了,但是始终有个让我不能完全安心的地方,那就是用PMA恢复的时候,使用的是上传机制,那么PHP默认

MySQL数据库备份(转)

mysql|备份|数据|数据库 MySQL数据库备份[晏子]  http://clyan.hongnet.com/index.html在数据库表丢失或损坏的情况下,备份你的数据库是很重要的.如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态.有时,正是MySQL管理员造成破坏.管理员已经知道表以破坏,用诸如vi或Emacs等编辑器试图直接编辑它们,这对表绝对不是件好事!备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp.cpio或tar等

再谈MySQL数据库备份恢复和乱码问题

在我转到wordpress之后第一个考虑的是它的数据库备份恢复问题,因为写bloger都知道,自己的blog记录的都是自己需要的宝贵的资料和文字,如果因为各种未知因素导致数据库崩溃或者空间商出了问题,丢失了数据的话,无疑是一种非常巨大的痛苦和损失. 所以在我blog里面有好几篇资料文章或者自己心得文章来讨论mysql数据库备份恢复和乱码问题. 之前那些文章讨论结果已经暂时能满足我数据库备份和恢复问题了,但是始终有个让我不能完全安心的地方,那就是用PMA恢复的时候,使用的是上传机制,那么PHP默认

Ubuntu Server下MySql数据库备份脚本代码

说明: 我这里要把MySql数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2012_04_11.tar.gz的压缩文件格式(2012_04_11是指备份执行时当天的日期), 最后只保留最近7天的备份. 实现步骤: 1.创建保存备份文件的目录:/home/mysql_datacd /home #进入目录 mkdir mysql_data #创建目录2.创建备份脚本文件:/home/mysql_data

云数据库RDS中的MySQL数据库备份

背景 RDS使用mysqldump对 MySQL 数据库进行逻辑全量备份,使用开源软件Xtrabackup进行物理全量备份,是实例级别的备份.本文主要从原理的角度来介绍MySQL数据库的备份和恢复,让用户更加了解RDS的备份恢复机制. 一.使用Mysqldump进行逻辑备份  mysqldump作为重要的MySQL备份工具,功能相当强大.备份参数.恢复策略,需要仔细研究. 备份数据库: 备份单个数据库或单个数据库中的指定表: mysqldump [OPTIONS] database [tb1]

Mysql数据库备份的几种方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 数据备份是一个网站能够正常运营的保障,数据备份包括网站源码备份和数据库备份,如果你使用的是ACCESS数据库,那么直接使用FTP下载数据库文件就可以了,但如果你使用了PHP+MYSQL进行网站建设,数据库备份就没有那么容易了.下面介绍几种mysql数据库备份的方法. 方法一:如果你使用的是虚拟主机,可以用使用phpmyadmin来备份数据库.

php实现MySQL数据库备份与还原类实例_php技巧

本文实例讲述了php实现MySQL数据库备份与还原类.分享给大家供大家参考.具体分析如下: 这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可,下面我们一起来看这个例子,代码如下: 复制代码 代码如下: <?php   /**   * 创建时间: 2012年5月21日   *   * 说明:分卷文件是以_v1.sql为结尾(20120522021241_all_v1.sql)   * 功能:实现mysql数据库分卷备份,选

mysql 数据库备份和还原方法集锦 推荐_Mysql

作/译者:叶金荣(Email: ),来源:http://imysql.cn/,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 日期:2006/10/01 本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22. 目前 MySQL 支持的免费备份工具有:mysqldump.mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INT