MySQL数据库中备份/恢复的两方法介绍

狮子座鱼尾纹

狮子座鱼尾纹

2016-01-29 14:51

MySQL数据库中备份/恢复的两方法介绍,MySQL数据库中备份/恢复的两方法介绍

下面介绍MySQL数据库备份/恢复的两种方法。

方法一:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/mysql/)

<?php/* * 功能:数据备份/恢复文件简易方法 *   以日期为单位,一天一个备份文件,以当天最后备份为准 *   用提交表单的形式进行操作, *  其中$_POST["tbl_name"]为预备份表名称数组 *      $_POST["sqlfile"]为预恢复数据文件的名称 *  注意:该备份没有结构备份,只有数据备份 * *  备份文件格式: *  `表名称1`{{数据1}}`表名称2`{{数据2}}`表名称3`{{数据3}}... *  * 创建时间:2005-02-25 * E-mail: kingerq AT msn.com * 来源:http://blog.csdn.net/kingerq */include("../inc/globals.inc.php");//省略包函文件db_mysql.inc和MYSQL连接信息set_time_limit(0);$dbdir = "d:/site/dbbak/";//用绝对路径$txtname = array();if($_POST){ if(!is_writable($dbdir)) {  echo "对不起!指定的备份目录不可写!请修改权限";  exit; }  //op为一个隐形域,识别备份或者恢复 if($_POST["op"]){//备份数据  //生成每个表的临时备份文件  foreach($_POST["tbl_name"] as $tbl){   $txtname[] = $tbl.".txt";   $sql = "SELECT * FROM `$tbl` INTO OUTFILE '".$dbdir.end($txtname)."'";   $db-query($sql);  }   //将生成的临时备份文件合在一起  $outfile = date("Y-m-d").".sql";    if(file_exists($dbdir.$outfile)) @unlink($dbdir.$outfile);    $fpr = fopen($dbdir.$outfile, "a");  foreach($txtname as $txt){   if(file_exists($dbdir.$txt)){    //读取临时备份文件    $tdata = readfiles($dbdir.$txt);            //生成备份文件    $tbl = explode(".", $txt);    $str = "`".$tbl[0]."`{{".$tdata."}}";    if(fwrite($fpr, $str)){     echo $tbl[0]."...写入 $outfile 成功!<brn";    }else{     echo $tbl[0]."...写入 $outfile 失败!<brn";    }        @unlink($dbdir.$txt);   }  }  fclose($fpr); }else{//恢复数据  $tdata = readfiles($dbdir.$_POST["sqlfile"]);    preg_match_all("/`(.*)`{{(.*)}}/isU", $tdata, $data_ar);  foreach($data_ar[1] as $k = $tt){   if(empty($data_ar[2][$k])) continue;   $tfile = $dbdir.$tt.".txt";   $fp = fopen($tfile, "w");   if(fwrite($fp, $data_ar[2][$k])){    //清空表    $sql = "TRUNCATE TABLE `$tt`";    $db-query($sql);    //重新装入数据    $sql = "LOAD DATA LOW_PRIORITY INFILE '".$dbdir.$tt.".txt"."' INTO TABLE `$tt`";    if($db-query($sql)){     fclose($fp);     echo $tt."表数据恢复成功!<brn";     unlink($dbdir.$tt.".txt");    }else{     echo $tt."表数据恢复失败!<brn";    }   }     }  //echo $tdata;  //print_r($data_ar);  //exit; }}  /*   * 读取文件内容  * 参数 $file 为文件名及完整路径  * 返回文件内容  */ function readfiles($file){  $tdata = "";  $fp = fopen($file, "r");  if(filesize($file) <= 0) return;  while($data = fread($fp, filesize($file))){   $tdata .= $data;  }  fclose($fp);  return $tdata; }?

方法二:

想在PHP后台管理直接能够备份数据库,于是想呀想,一直没有什么思路,一开始是考虑用php来访问服务器安装mysql的目录,比如 /usr/local/mysql/data目录,直接把下面对应的文件进行备份,但是出现了问题:

第一、运行php的是apche的用户,比如是nobody,那么它一般是没有权限访问/usr/local/mysql/data目录的。

第二、就算能够访问,那么你如何能够把/usr/local/mysql/data目录下的文件拷贝出来呢?因为mysql在运行的时候是不运行访问的,那么nobody用户有权限停止mysql的服务,不可能!

越想越不对劲,没有办法,看能不能从PHP操作数据库入手,于是就去看了下phpMyadmin和Discuz!的代码,呵呵,于是偷抄了Discuz!的代码,形成了如下备份数据库的方法。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/mysql/)

展开更多 50%)
分享

猜你喜欢

MySQL数据库中备份/恢复的两方法介绍

MySQL mysql数据库
MySQL数据库中备份/恢复的两方法介绍

MySQL数据库备份与恢复

编程语言 网络编程
MySQL数据库备份与恢复

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL数据库和备份与恢复

MySQL mysql数据库
MySQL数据库和备份与恢复

妙用phpMyBackupPro备份恢复Mysql数据库

编程语言 网络编程
妙用phpMyBackupPro备份恢复Mysql数据库

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL数据库备份

MySQL mysql数据库
MySQL数据库备份

MySQL数据库备份方法说明

编程语言 网络编程
MySQL数据库备份方法说明

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Oracle数据库技术(33)

Oracle数据库技术(33)

《智龙迷城》攻略之白盾组队分析

《智龙迷城》攻略之白盾组队分析
下拉加载更多内容 ↓