最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

php備份mysql數(shù)據(jù)庫程序代碼

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 09:52:23
文檔

php備份mysql數(shù)據(jù)庫程序代碼

php備份mysql數(shù)據(jù)庫程序代碼:在我們開發(fā)中數(shù)據(jù)庫備份是很重要的環(huán)節(jié),下面我們來分享兩個php備份mysql數(shù)據(jù)庫類,有需要的朋友可稍加修改即可使用哦。 先看備份的類文件 backdata.class.php: 代碼如下 /* * *簡單的一個Mysql備份數(shù)據(jù)類 * */ class backupD
推薦度:
導(dǎo)讀php備份mysql數(shù)據(jù)庫程序代碼:在我們開發(fā)中數(shù)據(jù)庫備份是很重要的環(huán)節(jié),下面我們來分享兩個php備份mysql數(shù)據(jù)庫類,有需要的朋友可稍加修改即可使用哦。 先看備份的類文件 backdata.class.php: 代碼如下 /* * *簡單的一個Mysql備份數(shù)據(jù)類 * */ class backupD

在我們開發(fā)中數(shù)據(jù)庫備份是很重要的環(huán)節(jié),下面我們來分享兩個php備份mysql數(shù)據(jù)庫類,有需要的朋友可稍加修改即可使用哦。

先看備份的類文件

backdata.class.php:

代碼如下

/*
*
*簡單的一個Mysql備份數(shù)據(jù)類
*
*/
class backupData{
private $mysql_link;//鏈接標(biāo)識
private $dbName; //數(shù)據(jù)庫名
private $dataDir; //數(shù)據(jù)所要存放的目錄
private $tableNames;//表名

public function __construct($mysql_link){
$this->mysql_link = $mysql_link;
}
public function backupTables($dbName,$dataDir,$tableNames){//開始備份
$this->dbName = $dbName;
$this->dataDir = $dataDir;
$this->tableNames = $tableNames;
$tables=$this->delarray($this->tableNames);
$sqls='';
foreach($tables as $tablename){
if($tablename==''){//表不存在時
continue;
}

//************************以下是形成SQL的前半部分**************
//如果存在表,就先刪除
$sqls .= "DROP TABLE IF EXISTS $tablename;n";
//讀取表結(jié)構(gòu)
$rs = mysql_query("SHOW CREATE TABLE $tablename",$this->mysql_link);
$row=mysql_fetch_row($rs);
//獲得表結(jié)構(gòu)組成SQL
$sqls.=$row['1'].";nn";
unset($rs);
unset($row);

//************************以下是形成SQL的后半部分**************
//查尋出表中的所有數(shù)據(jù)
$rs=mysql_query("select * from $tablename",$this->mysql_link);
//表的字段個數(shù)
$field=mysql_num_fields($rs);
//形成此種SQL語句:"INSERT INTO `groups` VALUES('1499e0ca25988d','主任','','0');"
while($rows=mysql_fetch_row($rs)){
$comma='';//逗號
$sqls.="INSERT INTO `$tablename` VALUES(";
for($i=0;$i<$field;$i++){
$sqls.=$comma."'".$rows[$i]."'";
$comma=',';
}
$sqls.=");nnn";
}
}
$backfilepath=$this->dataDir.date("Ymdhis",time()).'.sql';

//寫入文件
$filehandle = fopen($backfilepath, "w");
fwrite($filehandle, $sqls);
fclose($filehandle);
}
private function delarray($array){ //處理傳入進(jìn)來的數(shù)組
foreach($array as $tables){
if($tables=='*'){ //所有的表(獲得表名時不能按常規(guī)方式來組成一個數(shù)組)
$newtables=mysql_list_tables($this->dbName,$this->mysql_link);
$tableList = array();
for ($i = 0; $i < mysql_numrows($newtables); $i++){
array_push($tableList,mysql_tablename($newtables, $i));
}
$tableList=$tableList;
}else{
$tableList=$array;
break;
}
}
return $tableList;
}
}

?>

數(shù)據(jù)庫備份用法

代碼如下
require_once("backdata.class.php");
$link = @mysql_connect("localhost","數(shù)據(jù)庫名","密碼") or die ('Could not connect to server.');
mysql_query("use cms",$link);
mysql_query("set names utf8",$link);
$dbbck=new backupData($link);//實(shí)例化它,只要一個鏈接標(biāo)識就行了
//備份數(shù)據(jù)時,如想備份一個數(shù)據(jù)庫中的所有表,你可這樣寫:
$dbbck->backupTables("cms","./",array('*'));
//備份數(shù)據(jù)時,如想備份一個數(shù)據(jù)庫中的僅一個表時,你可這樣寫:
$dbbck->backupTables("cms","./",array('user'));
//備份數(shù)據(jù)時,如想備份一個數(shù)據(jù)庫中的多個表時,你可這樣寫:
$dbbck->backupTables("cms","./",array('user','acl','informatoin'));
//注解:$dbbck->backupTables("參1","參2",array());中,
參1為:數(shù)據(jù)庫名,
參2為:要存放備份數(shù)據(jù)的位置(即目錄地址)
第三個為:你要保存那些表


再來分享一個數(shù)據(jù)庫備份類

代碼如下

/**
* 說明,該類適用于小型的網(wǎng)站的數(shù)據(jù)庫備份,內(nèi)置mysql連接,只需要簡單配置數(shù)據(jù)連接
* 及存貯備份的位置即可。
* 類實(shí)列化并且連接數(shù)據(jù)庫以后可執(zhí)行以下操作
* get_db_table($database) 取得所有數(shù)據(jù)表
* export_sql($table,$subsection=0)) 生成sql文件,注意生成sql文件只保存到服務(wù)器目錄,不提供下載
* import_sql($dir) 恢復(fù)數(shù)據(jù)只導(dǎo)入服務(wù)器目錄下的sql文件
* 該類制作簡單,可任意傳播,如何您對該類有什么提議,請發(fā)送郵件給小蝦
* @author 趙紅健[游天小蝦]
* email:328742379@qq.com
* qq交流群:69574955 聚義堂-網(wǎng)頁制作交
*/

class data {
public $data_dir = "class/"; //備份文件存放的路徑
public $transfer =""; //臨時存放sql[切勿不要對該屬性賦值,否則會生成錯誤的sql語句]

/**
*數(shù)據(jù)庫連接
*@param string $host 數(shù)據(jù)庫主機(jī)名
*@param string $user 用戶名
*@param string $pwd 密碼
*@param string $db 選擇數(shù)據(jù)庫名
*@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;
}

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

/**
*驗(yàn)證目錄是否有效
*@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;
}
/**
*將數(shù)據(jù)寫入到文件中
*@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 "在關(guān)閉文件 時遇到錯誤,備份失敗!";}
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 '您沒有權(quán)限操作目錄,備份失敗';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
*注意:請不在目錄下面存放其它文件,或者目錄
*以節(jié)省恢復(fù)時間
*/
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;
}
}

}

應(yīng)用方法

代碼如下

//$d = new data();

//連接數(shù)據(jù)庫
//if(!$d->connect_db('localhost','root','','guestbook','gbk')){
// echo '數(shù)據(jù)庫連接失敗';
/

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

php備份mysql數(shù)據(jù)庫程序代碼

php備份mysql數(shù)據(jù)庫程序代碼:在我們開發(fā)中數(shù)據(jù)庫備份是很重要的環(huán)節(jié),下面我們來分享兩個php備份mysql數(shù)據(jù)庫類,有需要的朋友可稍加修改即可使用哦。 先看備份的類文件 backdata.class.php: 代碼如下 /* * *簡單的一個Mysql備份數(shù)據(jù)類 * */ class backupD
推薦度:
標(biāo)簽: 備份 php 代碼
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

Top