mysql分卷备份程序

原创 2007年09月12日 14:51:00
<?php
//2007-9-4
/*

    数据库备份流程
    1.选择要备份的表,设置相关参数 提交
    2.循环要备份的表
        得到当前表 结构
        得到当前表 数据
        如果是分卷备份
        得到
    3.
        
*/
include("inc/mysql.php");
include("inc/function.php");
set_time_limit(0);             //设定该页最久执行时间。
define("PASSWD","ggg123");    //设置的备份密码
$dsnArray    = require('config.php');
$db_obj = new sql_db($dsnArray['host'], $dsnArray['user'],  $dsnArray['pass'], $dsnArray['dbname'], $dsnArray['pconnect']);
if (!$db_obj)
{
    show_error(
"连接数据库失败,请正确配置 config.php 文件!");
    
die();
}    
if(is_post())    //提交表单后
{
    
if ($_POST['password'<> constant("PASSWD"))
    {
        show_error(
"密码不正确!");
        
die();
    }        
    
if (empty($_POST['tablename']))
    {
        show_error(
"请选择要备份的数据表");
        
die();
    }    
    
if($_POST["is_vol"])    //分卷
    if (!$_POST['vol_size'])
    {
        show_error(
"请填写备份文件分卷大小");
        
die();
    }

$start_time    = get_microtime();
$back_path    = "./backup/";                    //备份路径
$pre_file    = $dsnArray['dbname'].date("Ymd", time());            //文件名前辍
$exte_file    = ".txt";                        //文件扩展名
$file_name    = $pre_file.$exte_file;            //保存成的文件名

$fp=fopen($back_path.$file_name, "wb+");
if(!$fp)
{    show_error(
$back_path.$file_name." 文件打开失败!");
    
die();
}

//$_POST['tablename']    = array("ynjob_news","ynjob_puser","ynjob_company","ynjob_cjobinfo");
$sql="";
$curr_len    = 0;    //保存当前写入到文件的长度
$vol_numb    = 1;    //保存当前卷序号
//$is_vol    = true;
//$vol_size    = 1000;                            //每卷文件大小 ?K

foreach($_POST['tablename'as $table)    //循环所有选中表
{
    
$table    = trim($table);
    
if(empty($table))
        
continue;
    
echo "<br /> reading ".$table." ... ";
    
//写表结构到文件
    fwrite($fp,get_sql_struct($db_obj,$table));//产生 DROP TABLE CREATE TABLE  代码 得到表结构
    $db_obj->sql_query("select * from $table");    //得到数据
    while ($record    = $db_obj->sql_fetchrow())
    {
        
$sql=get_sql_insert($db_obj,$table, $record);    //产生 INSERT 语句
        if($_POST["is_vol"])    //分卷
        {
            
$curr_len += strlen($sql);
            
if($curr_len >= $_POST["vol_size"* 1000)    //超过大小 重新打开新卷
            {
                
fclose($fp);
                
echo " [save ok] <a href='".$back_path.$file_name."' target='_blank'> 下载 </a>";                
                
echo "<br />... creat  vol ".$vol_numb." ";                
                
$file_name    = $pre_file."_v".$vol_numb.$exte_file;    //保存成的文件名
                $fp=fopen($back_path.$file_name, "wb+");
                
$vol_numb++;
                
$curr_len = 0;
            }
        }
        
fwrite($fp,$sql);
    }
    
//flush();
}
fclose($fp);
echo " [save ok] <a href='".$back_path.$file_name."' target='_blank'> 下载 </a><br/>";    
echo "<script language=javascript>alert(" 备份结束! ");</script><a title=返回上一页 href=javascript:history.go(-1)>&lt;&lt;&lt;返回上一页</a>";

echo pass_time($start_time);
}
else 
{
?>
<form name="form1" method="post" action="<?=$_SERVER["PHP_SELF"]?>">
  
<table width="99%" bordercolorlight="#888888" bordercolordark="#FFFFFF"  cellpadding="1" cellspacing="1" border=1>
    
<tr align="center" class='header'><td colspan="2">数据备份</td></tr>
    
<tr><td align="center"><select name="tablename[]" size="12" multiple="MULTIPLE">
          
<option value="">-----------请选择要备份的表-----------</option>
          
<?
$db_obj->sql_query("show table status from ".$dsnArray['dbname']);
while ($record    = $db_obj->sql_fetchrow())
{
    
echo"<option value='".$record['Name']."'>".$record['Name']."</option>";
}

?>
        
</select></td><td><table width="99%" border="1"  cellpadding="1" cellspacing="1" bordercolorlight="#888888" bordercolordark="#FFFFFF">
          
<tr>
            
<td colspan="2">使用分卷备份</td>
          
</tr>
          
<tr>
            
<td colspan="2"><input type="checkbox" name="is_vol" value=1 />
              分卷备份
              
<input name="vol_size" type="text" size="10" value="1000" />
              K
</td>
          
</tr>
          
<tr>
            
<td colspan="2">选择目标位置</td>
          
</tr>
          
<tr>
            
<td colspan="2"><input type="radio" name="position" value="server" checked="checked" />
              备份到服务器
</td>
          
</tr>
          
<tr>
            
<td colspan="2">备份密码</td>
          
</tr>
          
<tr>
            
<td colspan="2">只有输入正确密码才能进行备份 <input name="password"  type="password" size="10" />
              
</td>
          
</tr>
          
        
</table></td></tr>
    
<tr><td colspan="2" align='center'><input type="submit" name="act" value="备份"></td></tr>
  
</table>
</form>
<?
}
$db_obj->sql_close();
?>
 

Ghost使用

GHOST是General Hardware Oriented Software Transfer的缩写,可译为“面向通用型硬件系统传送器”,通常称为“克隆幽灵”。克隆软件Ghost使用教程及深入一、...
  • sophiasy
  • sophiasy
  • 2007年10月31日 21:14
  • 534

Windows下MySQL自动备份最佳方案

Windows下MySQL自动备份的最佳方案     在Windows下备份MySQL数据库专门的软件较少,也不是很方便,所以网上基本上都是批处理脚本+Windows计划任务自动备份。     当然本...
  • dw14132124
  • dw14132124
  • 2013年04月25日 13:18
  • 4691

Linux 下分卷压缩打包命令

1.压缩打包 tar -jcf - [filename] | split -b 1k -d -a 3 - [filename].tar.bz2 tar -zcf - [filename] | spl...
  • devsha
  • devsha
  • 2015年09月25日 12:48
  • 507

Navicat for MySQL 数据备份教程

一个安全和可靠的服务器与定期运行备份有密切的关系,因为错误有可能随时发生,由攻击、硬件故障、人为错误、电力中断等都会照成数据丢失。Navicat备份功能为防止数据丢失而应运而生。     ...
  • mathsoftware
  • mathsoftware
  • 2016年02月22日 15:05
  • 1190

Mysql的数据备份类型——物理备份与逻辑备份,全量与增量

数据库备份方式,物理备份,逻辑备份,全量备份,增量备份
  • ziyao_zou
  • ziyao_zou
  • 2017年02月25日 15:18
  • 1328

Ubuntu 分卷压缩和解压

以每卷500M为例 先进入要压缩文件d父目录 tar分卷压缩:tar cvzpf - www.woaidiannao.com | split -b 500m 压缩后d文件名为 x00...
  • q617610589
  • q617610589
  • 2015年04月15日 08:01
  • 1940

Mac 上解压缩好压压缩的多个zip分卷方法

常见的是在windows上使用 好压软件压缩文件,由于文件过大,所以需要进行分卷压缩,然后进行传输。 例如 xxx 文件夹被压缩成三个分卷xxx.zip xxx.z01.zip xxx.z02....
  • longyc2010
  • longyc2010
  • 2016年08月28日 12:27
  • 5675

7z 命令行 解压 分卷的压缩文件

7z  x -otoadfull  "51CTO下载-Toad DBA Suite for SQL Server 6 正式版.part*"
  • hejisan
  • hejisan
  • 2017年10月10日 17:41
  • 295

linux下解压分卷压缩的zip文件

问题如题,解决方法: # 假设要解压的分卷文件是file.zip file.z01, file.z03 file.z04,(其他情况可类推) $cat file.zip file.z01, fil...
  • jimodeyangguang
  • jimodeyangguang
  • 2013年04月01日 14:30
  • 2377

数据库分卷备份 thinkphp3.2版

数据库分卷备份thinkphp3.2版 摘自thinkcmf,功能经修复和部分修改 控制器代码
  • u014626424
  • u014626424
  • 2016年02月16日 17:29
  • 1144
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql分卷备份程序
举报原因:
原因补充:

(最多只允许输入30个字)