• 技术文章 >php教程 >php手册

    php mysql数据库备份与数据还原类

    2016-06-13 10:07:41原创507
    说明,该类适用于小型的网站的数据库备份,内置MYSQL连接,只需要简单配置数据连接 * 及存贮备份的位置即可。 * 类实列化并且连接数据库以后可执行以下操作

    php教程 mysql教程数据库教程备份与数据还原类
    /**
    * 说明,该类适用于小型的网站的数据库备份,内置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 $tablen";
    $createtable = mysql_query("show create table $table");
    $create = mysql_fetch_row($createtable);
    $create[1] = str_replace("n","",$create[1]);
    $create[1] = str_replace("t","",$create[1]);

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

    $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 .= ")n";
    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 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 $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 $tmparry = $this->set_sql($table[$i],$subsection,$this->transfer);
    $sqlarry = array_merge($sqlarry,$tmparry);
    }
    $sqlarry[] = $this->transfer;
    }
    for($i=0;$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 if(eregi($pattern,$filearry[$i])){
    $sqls=file($dir.$filearry[$i]);
    foreach($sqls as $sql){
    str_replace("r","",$sql);
    str_replace("n","",$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 '恢复失败';
    //}

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    千万级数据并发解决方案(理论+实战):点击学习

    Mysql单表千万级数据量的查询优化与性能分析

    Mysql主从原理及其在高并发系统中的应用

    上一篇:php SQL Server Authentication连接部分代码 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• mysql 数据备份类代码• PHP类中的魔术方法(Magic Method)简明总结,magicmethod• 解析用PHP实现var_export的详细介绍• Xgcalendar 新增Php demo• 用PHP向数据库中实现简单的增删改查(纯代码,待完善),php增删
    1/1

    PHP中文网