mysql 数据备份类代码

 更新时间:2016年11月25日 16:39  点击:1631

 /***
  * 说明,该类适用于小型的网站的数据库教程备份,内置mysql连接,只需要简单配置数据连接
  * 及存贮备份的位置即可。
  * 类中show_dir_file() 方法可直接返回备份目录下的所有文件,返回以数组形式
  * 方法 expord_sql() 直接生成sql文件
  * 该类制作简单,可任意传播,如何您对该类有什么提议,请发送邮件给小虾
  * 制作人:游天小虾
  * emial:328742379@qq.com
  * **/

class data {
 public   $data_dir    = "class/";     //备份文件存放的路径
 public   $data_name   = "111cnnet.sql";   //备份文件名
 private  $mysql_host  = "localhost";    //数据库地址
 private  $mysql_user  = "root";     //用户名
 private  $mysql_pwd   = "lpl19881129";    //密码
 private  $mysql_db    = "date";     //数据库名
 private  $mysql_code  = "gbk";      //编码方式

/***
 * 1.连接数据库
 * **/
 function __construct(){
  $conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pwd);
  mysql_select_db($this->mysql_db);
  mysql_query("set names $this->mysql_code");
 }

/***
 * 2.生成sql语句
 * **/
 private function set_sql($table){
  $tabledump = "drop table if exists $table; ";
  $createtable = mysql_query("show create table $table");
  $create = mysql_fetch_row($createtable);
  $tabledump .= $create[1]."; ";

  $rows = mysql_query("select * from $table");
  $numfields = mysql_num_fields($rows);
  $numrows = mysql_num_rows($rows);
  while ($row = mysql_fetch_row($rows)){
     $comma = "";
     $tabledump .= "insert into $table values(";
     for($i = 0; $i < $numfields; $i++)
     {
    $tabledump .= $comma."'".mysql_escape_string($row[$i])."'";
    $comma = ",";
     }
     $tabledump .= "); ";
  }
  $tabledump .= " ";

  return $tabledump;
   }

/***
 * 3.显示存放目录下已经备份的文件
 * **/
    public function show_dir_file() {
  $dir = $this->data_dir;
     if(!is_dir($dir)){
   if(!mkdir($dir)){
    echo "文件夹不存在,尝试创建文件夹,创建失败,可能是您没有相关权限";
    exit();
   }else{
    chmod($dir,755);
   }
     }

  if(!is_writable($dir)){
   echo " 文件不可写";
   exit();
  }

  $link = opendir($dir);
  if(!$link){
   echo "创建链接失败";
   exit();
  }
  return scandir($dir);
    }

/***
 * 4.生成sql文件
 * **/
    public function expord_sql(){
     $this->show_dir_file();
     $result = mysql_list_tables($this->mysql_db);
  while($arr = mysql_fetch_row($result)){
   $tables .= $this->set_sql($arr[0]);
  }
  $file = $this->data_dir.$this->data_name;
  $link = fopen($file,"w+");
  if(!is_writable($file)){
   echo "文件不可写";
   exit();
  }
  fwrite($link,$tables);
  fclose($link);
  echo "备份成功";
    }

}

//mssql

 代码如下 复制代码
$server='hbds3';  
$username='username';  
$password='pwd';  
$database='database';  
$conn=mssql_connect($server,$username,$password)  
or die("couldn't connect to sql server on $server");  
$db=mssql_select_db($database) or die("couldn't open database $database");  

//oracle

 代码如下 复制代码
$conn = oci_connect("databasename","passwd","sid");
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ent_quotes), e_user_error);
}

//mysql

    

 代码如下 复制代码
$conn=mysql_connect("localhost","root","admin") or die("数据库服务器连接错误".mysql_error());
     mysql_select_db("admin",$conn) or die("数据库访问错误".mysql_error());
     mysql_query("set names gb2312");

 /**
  * 说明,该类适用于小型的网站的数据库备份,内置mysql连接,只需要简单配置数据连接
  * 及存贮备份的位置即可。
  * 类实列化并且连接数据库以后可执行以下操作
  * get_db_table($database)    取得所有数据表
  * export_sql($table,$subsection=0))   生成sql文件,注意生成sql文件只保存到服务器目录,不提供下载
  * import_sql($dir)     恢复数据只导入服务器目录下的sql文件
  * 该类制作简单,可任意传播,如何您对该类有什么提议,请发送邮件给小虾
  * @author 赵红健[游天小虾]
  * email:328742379@qq.com
  * qq交流群:69574955 聚义堂-网页制作交
  */

 代码如下 复制代码

class data {
 public   $data_dir    = "class/"; //备份文件存放的路径
 public   $transfer     ="";   //临时存放sql[切勿不要对该属性赋值,否则会生成错误的sql语句]

/**
 *数据库连接
 *@param string $host 数据库主机名
 *@param string $user 用户名
 *@param string $pwd  密码
 *@param string $db   选择数据库名
 *@param string $charset 编码方式
 */
 function connect_db($host,$user,$pwd,$db,$charset='gbk'){
  if(!$conn = mysql_connect($host,$user,$pwd)){
   return false;
  }
  mysql_select_db($db);
  mysql_query("set names $charset");
  return true;
 }

/**
 * 生成sql语句
 * @param   $table     要备份的表
 * @return  $tabledump 生成的sql语句
 */
 public function set_sql($table,$subsection=0,&$tabledom=''){
  $tabledom .= "drop table if exists $table ";
  $createtable = mysql_query("show create table $table");
  $create = mysql_fetch_row($createtable);
  $create[1] = str_replace(" ","",$create[1]);
  $create[1] = str_replace(" ","",$create[1]);

  $tabledom  .= $create[1]."; ";

  $rows = mysql_query("select * from $table");
  $numfields = mysql_num_fields($rows);
  $numrows = mysql_num_rows($rows);
  $n = 1;
  $sqlarry = array();
  while ($row = mysql_fetch_row($rows)){
     $comma = "";
     $tabledom  .= "insert into $table values(";
     for($i = 0; $i < $numfields; $i++)
     {
    $tabledom  .= $comma."'".mysql_escape_string($row[$i])."'";
    $comma = ",";
     }
    $tabledom  .= ") ";
     if($subsection != 0 && strlen($this->transfer )>=$subsection*1000){
       $sqlarry[$n]= $tabledom;
       $tabledom = ''; $n++;
     }
  }
  return $sqlarry;
   }

/**
 *列表数据库中的表
 *@param  database $database 要操作的数据库名
 *@return array    $dbarray  所列表的数据库表
 */
 public function get_db_table($database){
  $result = mysql_list_tables($database);
  while($tmparry = mysql_fetch_row($result)){
   $dbarry[]  = $tmparry[0];
  }
  return $dbarry;
 }

/**
 *验证目录是否有效
 *@param diretory $dir
 *@return booln
 */
 function check_write_dir($dir){
  if(!is_dir($dir)) {@mkdir($dir, 0777);}
  if(is_dir($dir)){
   if($link = opendir($dir)){
    $filearry = scandir($dir);
    for($i=0;$i<count($filearry);$i++){
     if($filearry[$i]!='.' || $filearry != '..'){
      @unlink($dir.$filearry[$i]);
     }
    }
   }
  }
  return true;
 }
/**
 *将数据写入到文件中
 *@param file $filename 文件名
 *@param string $str   要写入的信息
 *@return booln 写入成功则返回true,否则false
 */
 private function write_sql($filename,$str){
  $re= true;
  if(!@$fp=fopen($filename,"w+")) {$re=false; echo "在打开文件时遇到错误,备份失败!";}
  if(!@fwrite($fp,$str)) {$re=false; echo "在写入信息时遇到错误,备份失败!";}
  if(!@fclose($fp)) {$re=false; echo "在关闭文件 时遇到错误,备份失败!";}
  return $re;
 }

/**
 *生成sql文件
 *@param string $sql sql    语句
 *@param number $subsection 分卷大小,以kb为单位,为0表示不分卷
 */
     public function export_sql($table,$subsection=0){
      if(!$this->check_write_dir($this->data_dir)){echo '您没有权限操作目录,备份失败';return false;}
      if($subsection == 0){
       if(!is_array($table)){
    $this->set_sql($table,0,$this->transfer);
   }else{
    for($i=0;$i<count($table);$i++){
     $this->set_sql($table[$i],0,$this->transfer);
    }
   }
       $filename = $this->data_dir.date("ymd",time()).'_all.sql';
       if(!$this->write_sql($filename,$this->transfer)){return false;}
      }else{
       if(!is_array($table)){
    $sqlarry = $this->set_sql($table,$subsection,$this->transfer);
    $sqlarry[] = $this->transfer;
   }else{
    $sqlarry = array();
    for($i=0;$i<count($table);$i++){
     $tmparry = $this->set_sql($table[$i],$subsection,$this->transfer);
     $sqlarry = array_merge($sqlarry,$tmparry);
    }
    $sqlarry[] = $this->transfer;
   }
       for($i=0;$i<count($sqlarry);$i++){
        $filename = $this->data_dir.date("ymd",time()).'_part'.$i.'.sql';
        if(!$this->write_sql($filename,$sqlarry[$i])){return false;}
       }
      }
      return true;
    }
/**
 *载入sql文件
 *@param diretory $dir
 *@return booln
 *注意:请不在目录下面存放其它文件,或者目录
 *以节省恢复时间
 */
    public function import_sql($dir){
  if($link = opendir($dir)){
   $filearry = scandir($dir);
    $pattern = "_part[0-9]+.sql$|_all.sql$";
   for($i=0;$i<count($filearry);$i++){
    if(eregi($pattern,$filearry[$i])){
     $sqls=file($dir.$filearry[$i]);
     foreach($sqls as $sql){
      str_replace(" ","",$sql);
      str_replace(" ","",$sql);
      if(!mysql_query(trim($sql))) return false;
     }
    }
   }
   return true;
  }
    }

}

 

应用方法

 代码如下 复制代码

//$d = new data();

//连接数据库
//if(!$d->connect_db('localhost','root','','guestbook','gbk')){
// echo '数据库连接失败';
//}

//查找数据库内所有数据表
//$tablearry = $d->get_db_table('guestbook');

//备份并生成sql文件
//if(!$d->export_sql($tablearry)){
// echo '备份失败';
//}else{
// echo '备份成功';
//}

//恢复导入sql文件夹
//if($d->import_sql($d->data_dir)){
// echo '恢复成功';
//}else{
// echo '恢复失败';
//}

Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。 Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

windows下的memcache安装:
1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:memcached
2. 在终端(也即cmd命令界面)下输入 ‘c:memcachedmemcached.exe -d install

’ 安装
3. 再输入: ‘c:memcachedmemcached.exe -d start’ 启动。note: 以后

memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完

毕了。
4.下载http://cmy2009.ihost.tw/download,(php_memcache地址)请自己查找对应的

php版本的文件
5. 在c:winntphp.ini 加入一行 ‘extension=php_memcache.dll’
6.重新启动apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!

memcached的基本设置:

-p 监听的端口
-l 连接的ip地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位mb。默认64mb
-m 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

memcache环境测试:
运行下面的php文件,如果有输出,就表示环境搭建成功。开始领略memcache的魅力把

 代码如下 复制代码

<?php

$memcache = memcache_connect('localhost', 11211);

if ($memcache) {
$memcache->set("str_key", "string to store in memcached");
$memcache->set("num_key", 123);

$object = new stdclass;
$object->attribute = 'test';
$memcache->set("obj_key", $object);

$array = array('assoc'=>123, 345, 567);
$memcache->set("arr_key", $array);

var_dump($memcache->get('str_key'));
var_dump($memcache->get('num_key'));
var_dump($memcache->get('obj_key'));
}
else {
echo "connection to memcached failed";
}
?>


为什么不使用数据库做这些?

暂且不考虑使用什么样的数据库(ms-sql, oracle, postgres, mysql教程-innodb, etc..), 实现事务(acid,atomicity, consistency, isolation, and durability )需要大量开销,特别当使用到硬盘的时候,这就意味着查询可能会阻塞。当使用不包含事务的数据库(例如mysql-myisam ),上面的开销不存在,但读线程又可能会被写线程阻塞。
memcached从不阻塞,速度非常快。

这是一个完整理的php+mysql+ajax的用户注册实例程序,可以提供检测用户名是否被注册,这样可以增强用户体验哦,在你填写好用户名后就会提供你当前所有注册的用户是否己经被注册了。

本程序包括三个文件

reg.html 用户注册html页面
reg.php php处理代码
conn.php 数据库教程连接文件


reg.html代码

 代码如下 复制代码

<!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=gb2312" />
<title>php+ajax用户注册验证用户是否在存(php mysql完整实例)</title>
<style type="text/css教程">
body{
 font-size:12px;
 text-align:center;
}
.text{
 width:180px;
 height:12px;
}
p{
 width:600px;
 height:20px;
 line-height:20px;
 text-align:left;
}
p label{
 display:block;
 width:80px;
 height:20px;
 line-height:20px;
 float:left;
 text-align:right;
}
p span{
 margin-left:10px;
}
</style>
</head>
<body>
<script language="网页特效">
function createxmlhttprequest(){
 var xmlhttp;
 if(window.activexobject){
  xmlhttp = new activexobject("microsoft.xmlhttp");
 }else if(window.xmlhttprequest){
  xmlhttp = new xmlhttprequest();
 }
 return xmlhttp;
}

function checkname(){
 var name = document.getelementbyid('name'); //获取用户名文本框
 var span = document.getelementbyid('name_info'); //获取用于显示结果的span标记
 if(name.value.length <= 4){
  span.style.color = '#ff0000'; //设置span标记内的字体颜色为红色
  span.innerhtml = '用户名长度不能少于4个字符!'; //span标记内容
  return false;
 }
 var xmlhttp = createxmlhttprequest();//创建异步请求对象
 var time = new date().gettime();
 var url = 'reg.php?act=reg&name=' + name.value.tolowercase() + '&tmp=' + time;//构造出请求地址
 xmlhttp.open("get",url,true); //建立一个异步请求
 /*这里我们使用get方式请求
   post方式的请求基本差不多,朋友们自己试试如果不行,在下面给我留言*/
 xmlhttp.onreadystatechange = function(){ //监视请求状态
  span.style.color = '#ff9900';
  span.innerhtml = '查询中,请稍候!';
  if(xmlhttp.readystate == 4 && xmlhttp.status == 200){
   if(xmlhttp.responsetext.indexof('no') != -1){ //如果服务器返回的信息中有no
    span.style.color = '#cb2121'; //设置span标记颜色为红色
    span.innerhtml = '用户名[' + name.value + ']已经被别的用户使用!';
   }else{//如果返回信息中没有no
    span.style.color = '#00a800';//设置颜色为绿色
    span.innerhtml = '恭喜您,该用户名未被注册!';
   }
   return true;
   delete xmlhttp; //删除请求对象
  }
 }
 xmlhttp.send(null); //发送请求
}
</script>
<form method="post" action="reg.php">
<p><label>用户名:</label><input type="text" class="text" id="name" name="user_name"/><span id="name_info"></span></p>
<p><label></label><input type="button" value="检查用户名" onclick="checkname()"/></p>
<p><label>密码:</label><input type="password" class="text" /></p>
<p><label>&nbsp;</label><input type="submit" value="注册" /></p>
</form>
</body>
</html>

reg.php文件

 代码如下 复制代码


<?php

include("conn.php");
$name=$_get['name'];
$name=urldecode($name);

if(strlen($name)>0){
 $sql="select username from registration where username = '$name'";
 $result=mysql_query($sql);
 $row=mysql_fetch_array($result);
 
 if($_get['act'] == 'reg'){
  if(!empty($row['username'])){ //只要注册用户名为kaixin的时候,注册页面就会用红色字体提示次用户已被注册!
  echo 'no';
  }else{
  echo 'yes';
  }
 }
}
?>

conn.php数据库文件

 代码如下 复制代码
<?php
/* created on 下午12:08:25*/
 $conn=@mysql_connect("localhost","root","")or die("111cn.net提示你:连接失败!");
 mysql_select_db("reg",$conn);
 mysql_query("set names 'gbk'");
?>

registration数据表结构

-- phpmyadmin sql dump
-- version 2.11.2.1
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2009 年 05 月 20 日 05:29
-- 服务器版本: 5.0.45
-- php 版本: 5.2.5

set sql_mode="no_auto_value_on_zero";

--
-- 数据库: `reg`
--

-- --------------------------------------------------------

--
-- 表的结构 `registration` phpmyadmin导入数据
--

 代码如下 复制代码

create table `registration` (
  `id` tinyint(6) not null auto_increment,
  `username` varchar(14) not null comment '注册用户名',
  `userpwd` varchar(14) not null comment '注册密码',
  primary key  (`id`)
) engine=innodb  default charset=gb2312 auto_increment=6 ;

--


-- 导出表中的数据 `registration`
--

 代码如下 复制代码

insert into `registration` (`id`, `username`, `userpwd`) values
(1, 'admin', 'admin888'),
(2, 'lyn', '111cn.net'),
(3, 'xiaot', 'xiaot'),
(4, 'xiaoe', 'xiaoe'),
(5, '我爱www.111cn.net', '5201314110');

 

[!--infotagslink--]

相关文章

  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • Linux下MySQL数据库的备份与还原

    深入解析Linux下MySQL数据库的备份与还原...2013-09-11
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • php导出csv格式数据并将数字转换成文本的思路以及代码分享

    php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • 几种延迟加载JS代码的方法加快网页的访问速度

    本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
  • MySQL数据库备份还原方法

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:/Program Files/MySQL/MySQL Server 4.1/bin (或者直接将windows的环境变量path中添加该目录) ...2013-09-26
  • vue项目,代码提交至码云,iconfont的用法说明

    这篇文章主要介绍了vue项目,代码提交至码云,iconfont的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-30