百科 教育 动画 游戏 博览 网址 金融 搜搜 资料
触屏版

在线: 1945   » [用户登录]   QQ   » [注册]
close ◇ 读取数据,请稍候 Loading...

.: Welcome to flymote.com [flymot.com] :.



  »

◆ 其它资料:.

数据库数据的同步工具程序

2007-03-28 22:14:57   李茂祥    原创   阅读: 5624   【本类别其它资料】 【资料库首页
上一篇 收藏 打印 收藏夹 下一篇

本工具用于数据库数据的同步操作,当前是对files数据库,但可以对任何数据库进行同步 如果运行时未发现数据文件($date_data = "sync_db_data.gz"),将自动进行增量数据备份并生成数据文件$date_data 如果运行时发现数据文件,将自动进行数据库数据更新操作,并删除数据文件$date_data 使用时,本地与服务器都需要使用本程序,不论是哪个地方添加或修改了数据,就只需运行一下本程序,形成数据文件$date_data;而后将这个文件移动到另一台计算机的本程序安放目录,运行一下本程序即可
〖数据库数据的同步工具程序〗

<HTML>
<HEAD>
 <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>Flymote.com filesplit工具</TITLE>
<style type="text/css">
<!--
a:link {
 text-decoration: none;
}
a:visited {
 text-decoration: none;
}
a:hover {
 text-decoration: none;
}
a:active {
 text-decoration: none;
}
body,td,th,font {
 font-size: 9pt;
}
body {
 margin-top: 2px;
}
-->
</style>
</HEAD><body><?php
/* 本工具用于数据库数据的同步操作,当前是对files数据库,但可以对任何数据库进行同步
如果运行时未发现数据文件($date_data = "sync_db_data.gz"),将自动进行增量数据备份并生成数据文件$date_data
如果运行时发现数据文件,将自动进行数据库数据更新操作,并删除数据文件$date_data
使用时,本地与服务器都需要使用本程序,不论是哪个地方添加或修改了数据,就只需运行一下本程序,形成数据文件$date_data;而后将这个文件移动到另一台计算机的本程序安放目录,运行一下本程序即可
*/
function show(){
 global $dbname;
echo '<br><form method=POST><br><P>
<font size="2" color=blue>本工具用于数据库数据的同步操作,需要在两台机器都使用这个程序  数据库 '.$dbname.' </font><br><br>
<font size="2" color=#FF8000>连接主机:<input type="text" name=host size=15 value=localhost>  
用户名:<input type="text" name=user size=7 value=root>  密码:<input type="text" name=pass size=7 value=root><br>  
<font size="2" color=#FF8000>备份数据库:<input type="text" name=dbname size=15 value='.$dbname.'> * 数据库的名称 <br><br>
所备份数据库表的名称:<input type="text" name=files_db value=files> *注意 必须含有一个名为 <input type="text" name=date size=7 value=modidate> 的日期时间型字段<br>
恢复数据保存表的名称::<input type="text" name=restore_db value=files> <br>
<font size="2" color=#FF8000>日志文件名:<input type="text" name=date_file size=15 value=sync_db_lastdate> * 注意 本文件是用于记录时间戳的!<br>
目标 文件:<input type="text" name=date_data size=15 value=sync_db_data.gz> * 注意 本处是取得的从记录时间戳开始到现在的所有数据,文件自动被压缩<hr>
<li>** 如果运行时<b>没有</b>发现目标文件(如sync_db_data.gz),将自动进行增量数据备份并生成目标文件(如sync_db_data.gz) **</li>
<li>** 如果运行时发现<b>存在</b>目标文件,将自动进行数据库数据更新操作,并删除目标文件 **</li><br>
<li>** 操作说明:如果是备份数据,程序将按照 日志文件 的时间戳记为时间的起点开始导出所有从那时到现在的全部数据,并打入gz压缩包;处理后,程序会更新日志文件的时间戳记;在需要同步数据的地方,你需要把这个GZ文件包拷贝过去,放在本程序的运行目录下,直接运行本程序;程序会自动处理导入数据,并更新其时间日志的时间戳记,而后自动删除这个文件;
 **</li><hr>
程序执行时间最大:<input type="text" name=times value=800>秒
<p align=center><input type="submit" value="开始 >>" ></p>
</P></form></font>
';
}

require_once("./../adodb/adodb.inc.php");
if (isset($_POST["dbname"]))
{
 $dbname = $_POST["dbname"];
 $host = $_POST["host"];
 $user = $_POST["user"];
 $pass = $_POST["pass"];
}else{
 $dbname = "phparticle";
 $host = "localhost";
 $user = "root";
 $pass = "root";
}
$Global_DB_Connection = &ADONewConnection ( "mysqli" );  // create a connection
$Global_DB_Connection ->Connect( $host, $user, $pass, $dbname );

if (empty($_POST['date_file']) || empty($_POST['date_data']) )
 show();
else{
 $times = intval(empty($_POST['times'])?600:$_POST['times']);
 ini_set("max_execution_time",$times);
 
  /*
  $date_file = "sync_db_lastdate"; // the file included the last backup-date
  $date_data = "sync_db_data.gz";  //the file included the last backup-datas ,if it exists , I will restore data auto
  $files_db = "files"; //the database table name for backup
  $restore_db = "files"; //the database table name for restore
  */
  $date_file = $_POST['date_file']; // the file included the last backup-date
  $files_db = $_POST['files_db']; //the database table name for backup
  $date_data = "(".$dbname."-".$files_db.")".$_POST['date_data'];  //the file included the last backup-datas ,if it exists , I will restore data auto
  $restore_db = $_POST['restore_db']; //the database table name for restore
  $date = $_POST['date'];
if (!file_exists($date_data))   //backup data
{
 $handle_r = @fopen($date_file,"rb");
 if (!$handle_r)
  die("<font color="#ff0000"><b>Local datefile $date_file cant open , check it please !</b></font>");
 $times = intval(fgets($handle_r));
 fclose($handle_r);
 $datas = $Global_DB_Connection->Execute("select * from $files_db where UNIX_TIMESTAMP($date) > $times");
 if (!is_object($datas))
  die("<font color="#ff0000"><b>Cant execute the SQL command , check it please ! ".$Global_DB_Connection->ErrorMsg()." </b></font>");
 elseif ($datas->RecordCount( ) < 1)
  die("<font color="#ff0000"><b>Cant found datas for you , do nothing !</b></font>");
 else
  echo "<font color="#ff8040"><b>***** Had ".$datas->RecordCount( )." records found *****</b></font><br>";
 $temp0 = time()."rn";
 foreach ($datas->GetArray() as $data){
  $temp0 .= " replace $restore_db set ";
  foreach ($data as $key => $temp){
    if (is_int($key))
     continue;
    $temp0 .= " $key = '".addslashes($temp)."', ";
  }
  $temp0 .= "; # .::SQL_line split comment for sync_files_db.php by lmx::. rn";
 };

 $handle0 = gzopen($date_data, "w9");
 if (!$handle0)
  die("<font color="#ff0000"><b>Output file $date_data cant build , check it please !</b></font>");
 gzwrite($handle0, $temp0);
 gzclose($handle0);
 echo "<font color="#ff8040"><b>the output file {$date_data} been created</b></font><br>";
 copy($date_file,$date_file.".bak");
 $handle_r = @fopen($date_file,"wb");
 if (!$handle_r)
  die("<font color="#ff0000"><b>Local datefile $date_file cant open , check it please !</b></font>");
 fputs($handle_r,time());
 fclose($handle_r);
 echo "<font color="#ff8040"><b>the date-config file {$date_file} been modified!</b></font><br>";
}else       //restore data auto
{
 $temp = gzfile($date_data);
 $time = array_shift ($temp);
 $temp0="";
 $count = 0;
 foreach ($temp as $line)
 {
  $temp0 .= $line;
  if (strpos($line,"# .::SQL_line split comment for sync_files_db.php by lmx::. "))
  {
   $temp0 = str_replace(", ; # .::SQL_line split comment for sync_files_db.php by lmx::.",";",$temp0);
   $db = $Global_DB_Connection->Execute(trim($temp0));
   if (!$db)
    echo "<font color="#ff0000"><b>".$temp0.$Global_DB_Connection->ErrorMsg()."</b></font><br>";
   $temp0 = "";
   $count++;
  }
 }
 
 if (unlink($date_data))
  echo "<font color="#ff8040"><b>the datefile $date_data  been deleted!</b></font><br>";
 echo "<font color="#ff8040"><b>$count SQL commands been executed !!</b></font><br>";
 copy($date_file,$date_file.".bak");
 $handle_r = @fopen($date_file,"wb");
 if (!$handle_r)
  die("<font color="#ff0000"><b>Local datefile $date_file cant open , check it please !</b></font>");
 fputs($handle_r,$time);
 fclose($handle_r);
 echo "<font color="#ff8040"><b>the date-config file {$date_file} been modified!</b></font><br>";
}
}
?></body></html>

责任编辑: admin

【最近的搜索】:

上一篇 收藏 打印 收藏夹 下一篇
CopyRight(c) 2007 - 2017 All Rights Reserved  【赣ICP备12001042号】
触屏版 | Archiver 20191207 09:38 | 简介 | 帮助 | 留言 | 关于 | 360网站安全检测平台