关于如何备份数据库(Mysql)的简易程序

时间:2016-04-13

  在公司(网络)的服务器上有很多网站,我上传网站时对其他瓦干也有同样的权限。所以就想把同事的网站荡下来学习一下。有了源代码,没有数据库什么也运行不了啊。服务器的数据库是安网站开的,每一个网站把*.sql发给服务器管理员,由管理员导入到数据库中。但是数据库账号密码不能登陆只能执行sql语句。所以我就想起来做一个简易的,类似于phpmyadmin的数据库导出功能。这样我就可以轻松的获得所有网站的数据库了。
  
  用这个程序可以实现简单的数据导出(生成的脚本可直接在phpmyadmin执行)。进一步的功能还可以慢慢扩展。当然不要用来盗用别人机密的冬冬了。
  
  其中解析的数据类型还不全,只是集中简单的常用类型。如果那位仁兄,发现了其他不适用的类型,请告诉我mailto:woaini4651@yahoo.com.cn。
  
  index.php
  
  <html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <title>数据库备份</title>
  <style type="text/css">
  .borderoff{ border-style:none; background-color:#F3F3F3}
  </style>
  </head>
  <body>
  <table width="100%" border="0" cellspacing="1" cellpadding="0" align="center">
  <tr valign="top">
  <td height="378"><br>
  <form action="cmd.php" method="post" name="backup" target="_blank" id="backup">
  <table width="500" border="0" cellspacing="1" cellpadding="4" align="center">
  <tr>
  <td colspan="2" align="center">数据库备份</td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right"> 服务器名:</td>
  <td width="313"><input name="hostname" type="text" class="borderoff" value="localhost" size="35" maxlength="50">
  </td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right"> 数据库名:</td>
  <td width="313"><input name="database" type="text" class="borderoff" value="yes_da" size="35" maxlength="50">
  </td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right">账    号:</td>
  <td width="313"><input name="username" type="text" class="borderoff" value="root" size="35" maxlength="50">
  </td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right">密    码:</td>
  <td width="313"><input name="password" type="text" class="borderoff" size="35" maxlength="50">
  </td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right"> 完全备份:</td>
  <td width="313">
  <input type="radio" name="backup_type" value="full" checked>
  </td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right">只备份结构:</td>
  <td width="313">
  <input type="radio" name="backup_type" value="structure">
  </td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right">只备份数据:</td>
  <td width="313">
  <input type="radio" name="backup_type" value="data">
  </td>
  </tr>
  <tr bgcolor="#F3F3F3">
  <td width="166" align="right">采用压缩格式:</td>
  <td width="313">
  <input type="radio" name="gzipcompress" value="0" checked>
  否
  <input type="radio" name="gzipcompress" value="1">
  是(zip)</td>
  </tr>
  <tr>
  <td colspan="2" align="center">
  <input name="backupstart" type="submit" value="开始备份">
  </td>
  </tr>
  </table>
  </form>
  <p align="center"> <br>
  <br>
  </p></td>
  </tr>
  </table>
  </body>
  </html>
  
  cmd.php
  
  <?php
  if(isset($_POST['backupstart']))
  {
  $hostname = trim($_POST['hostname']);
  $database = trim($_POST['database']);
  $username = trim($_POST['username']);
  $password = trim($_POST['password']);
  $backtype = $_POST['backup_type'];
  $gz  = $_POST['gzipcompress'];
  
  $link = @mysql_pconnect($hostname, $username, $password);
  if(!$link)
  {  //连接数据库
  echo "数据库打开出错!";
  exit();
  }//end if
  
  $table_list = get_table_list($link,$database);
  if($table_name===false)
  {  //检索数据库的表
  echo "数据库打开出错!!";
  exit();
  }//end if
  //echo "<pre>";
  //print_r($table_list);
  
  $table_code = "";
  while(list($key,$table_name)=each($table_list))
  {  //执行对每一个表的数据返回
  if($backtype!="data")
  {  //备份结构
  $table_code .= get_table_code($link,$database,$table_name);
  }//end if
  if($backtype!="structure")
  {  //备份数据
  $table_code .= get_table_data($link,$database,$table_name);
  }//end if
  }//end while
  //echo $table_code;
  if($gz==0)
  {  //输出
  $filename = $database.".sql";
  $handle = fopen($filename, "a+");
  $temp = fwrite($handle, $table_code);
  echo $temp;
  fclose($handle);
  //header("location:",$filename);
  
  echo "<script>location.replace('".$filename."');</script>";
  
  }elseif($gz==1){
  $filename = $database.".zip";
  $fp = gzopen($filename, "w9");
  gzwrite($fp,$table_code);
  gzclose($fp);
  
  //header("location:",$filename);
  
  echo "<script>location.replace('".$filename."');</script>";
  
  }//end if
  
  }else{
  echo "连接错误!!!";
  exit();
  }//end if
  //*****************************************************************
  //函数名:get_table_list
  //功能:返回指定数据库中的所有表名
  //参数:$link 是数据库连接
  // $database 数据库名
  //时间:2004年3月23日
  //作者:野马
  //QQ:46163020
  //Email:woaini4651@yahoo.com.cn
  //*****************************************************************
  function get_table_list($link,$database)
  {
  $result = @mysql_list_tables($database);
  if(!$result)
  {//判断打开是否出错
  return false;
  }//end if
  while($row = mysql_fetch_row($result))
  {
  $table_name[] = $row[0];
  }//end while
  mysql_free_result($result);
  return $table_name;
  }//end function
  //*****************************************************************
  //函数名:get_table_code
  //功能:返回指定数据库中表的结构,用于创建指定表的SQL语句
  //参数:$link 是数据库连接
  // $database 数据库名
  // $table_name表名
  //时间:2004年3月23日
  //作者:野马
  //QQ:46163020
  //Email:woaini4651@yahoo.com.cn
  //*****************************************************************
  function get_table_code($link,$database,$table_name)
  {
  mysql_select_db($database, $link);
  $result = mysql_query("select * from ".$table_name, $link);
  $return_str = "CREATE TABLE `".$table_name."` (\n\t";
  $fields_num = (int)mysql_num_fields($result);
  
  $fun_my['string'] = "varchar";
  $fun_my['datetime'] = "datetime";
  $fun_my['blob'] = "text";
  $fun_my['real'] = "float";
  echo "<br>";
  for($i=0; $i < $fields_num; $i++)
  {
  $return_str .= "`".mysql_field_name($result, $i)."` ";
  
  $type = mysql_field_type($result, $i);
  if(isset($fun_my[$type]))
  {  //解析数据类型
  if($fun_my[$type]=="datetime" || $fun_my[$type]=="text")
  {
  $return_str .= $fun_my[$type]." ";
  }else{
  $return_str .= $fun_my[$type]."(".mysql_field_len($result, $i).") ";
  }//end if
  }else{
  $return_str .= $type."(".mys
上一条:构架Linux下的PHP+MySQL开发环境 下一条:如何才能使图形化管理MySQL更轻松(一)

相关文章

最新文章