1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > php实现mysql数据库备份类【PHP】

php实现mysql数据库备份类【PHP】

时间:2024-01-25 16:04:56

相关推荐

php实现mysql数据库备份类【PHP】

后端开发|php教程

php,mysql,数据库备份类

后端开发-php教程

1、实例化DbBak需要告诉它两件事:数据服务器在哪里($connectid)、备份到哪个目录($backupDir):

魔兽争霸 源码,ubuntu设置ftp密码,tomcat 运行服务端,爬虫 清洗 标签,php包含math库,花都区常规seo优化值多少钱lzw

require_once(‘DbBak.php’);

require_once(‘TableBak.php’);

$connectid = mysql_connect(‘localhost’,’root’,’123456′);

$backupDir = ‘data’;

$DbBak = new DbBak($connectid,$backupDir);

免费漫画网站源码,给ubuntu安装桌面,tomcat8附件下载乱码,app反编译爬虫,php和java加密解码方法,武汉移动seolzw

2、然后就可以开始备份数据库了,你不仅能够指定备份那个数据库,而且能详细设置只备份那几个表:

2.1如果你想备份mybbs库中的所有表,只要这样:

教育新闻网站源码,Ubuntu打开dmg文件,厕所桶底爬虫,php >null,汉中企业seolzw

$DbBak->backupDb(‘mybbs’);

2.2如果你只想备份mybbs库中的board、face、friendlist表,可以用一个一维数组指定:

$DbBak->backupDb(‘mybbs’,array(‘board’,’face’,’friendsite’));

2.3如果只想备份一个表,比如board表:

$DbBak->backupDb(‘mybbs’,’board’);

3,数据恢复:

对于2.1、2.1、2.3三种情况,只要相应的修改下语句,把backupDb换成restoreDb就能实现数据恢复了:

$DbBak->restoreDb(‘mybbs’);

SQL代码

$DbBak->restoreDb(‘mybbs’,array(‘board’,’face’,’friendsite’));

PHP代码

$DbBak->restoreDb(‘mybbs’,’board’);

PHP代码

require_once(‘TableBak.php’);

class DbBak {

var $_mysql_link_id;

var $_dataDir;

var $_tableList;

var $_TableBak;

function DbBak($_mysql_link_id,$dataDir)

{

( (!is_string($dataDir)) || strlen($dataDir)==0) && die(‘error:$datadir is not a string’);

!is_dir($dataDir) && mkdir($dataDir);

$this->_dataDir = $dataDir;

$this->_mysql_link_id = $_mysql_link_id;

}

function backupDb($dbName,$tableName=null)

{

( (!is_string($dbName)) || strlen($dbName)==0 ) && die(‘$dbName must be a string value’);

//step1:选择数据库:

mysql_select_db($dbName);

//step2:创建数据库备份目录

$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;

!is_dir($dbDir) && mkdir($dbDir);

//step3:得到数据库所有表名 并开始备份表

$this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir);

if(is_null($tableName)){//backup all table in the db

$this->_backupAllTable($dbName);

return;

}

if(is_string($tableName)){

(strlen($tableName)==0) && die(‘….’);

$this->_backupOneTable($dbName,$tableName);

return;

}

if (is_array($tableName)){

foreach ($tableName as $table){

( (!is_string($table)) || strlen($table)==0 ) && die(‘….’);

}

$this->_backupSomeTalbe($dbName,$tableName);

return;

}

}

function restoreDb($dbName,$tableName=null){

( (!is_string($dbName)) || strlen($dbName)==0 ) && die(‘$dbName must be a string value’);

//step1:检查是否存在数据库 并连接:

@mysql_select_db($dbName) || die(“the database $dbName dose not exists”);

//step2:检查是否存在数据库备份目录

$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;

!is_dir($dbDir) && die(“$dbDir not exists”);

//step3:start restore

$this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir);

if(is_null($tableName)){//backup all table in the db

$this->_restoreAllTable($dbName);

return;

}

if(is_string($tableName)){

(strlen($tableName)==0) && die(‘….’);

$this->_restoreOneTable($dbName,$tableName);

return;

}

if (is_array($tableName)){

foreach ($tableName as $table){

( (!is_string($table)) || strlen($table)==0 ) && die(‘….’);

}

$this->_restoreSomeTalbe($dbName,$tableName);

return;

}

}

function _getTableList($dbName)

{

$tableList = array();

$result=mysql_list_tables($dbName,$this->_mysql_link_id);

for ($i = 0; $i < mysql_num_rows($result); $i++){

array_push($tableList,mysql_tablename($result, $i));

}

mysql_free_result($result);

return $tableList;

}

function _backupAllTable($dbName)

{

foreach ($this->_getTableList($dbName) as $tableName){

$this->_TableBak->backupTable($tableName);

}

}

function _backupOneTable($dbName,$tableName)

{

!in_array($tableName,$this->_getTableList($dbName)) && die(“指定的表名$tableName在数据库中不存在”);

$this->_TableBak->backupTable($tableName);

}

function _backupSomeTalbe($dbName,$TableNameList)

{

foreach ($TableNameList as $tableName){

!in_array($tableName,$this->_getTableList($dbName)) && die(“指定的表名$tableName在数据库中不存在”);

}

foreach ($TableNameList as $tableName){

$this->_TableBak->backupTable($tableName);

}

}

function _restoreAllTable($dbName)

{

//step1:检查是否存在所有数据表的备份文件 以及是否可写:

foreach ($this->_getTableList($dbName) as $tableName){

$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR

. $dbName.DIRECTORY_SEPARATOR

. $tableName.DIRECTORY_SEPARATOR

. $tableName.’.sql’;

!is_writeable ($tableBakFile) && die(“$tableBakFile not exists or unwirteable”);

}

//step2:start restore

foreach ($this->_getTableList($dbName) as $tableName){

$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR

. $dbName.DIRECTORY_SEPARATOR

. $tableName.DIRECTORY_SEPARATOR

. $tableName.’.sql’;

$this->_TableBak->restoreTable($tableName,$tableBakFile);

}

}

function _restoreOneTable($dbName,$tableName)

{

//step1:检查是否存在数据表:

!in_array($tableName,$this->_getTableList($dbName)) && die(“指定的表名$tableName在数据库中不存在”);

//step2:检查是否存在数据表备份文件 以及是否可写:

$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR

. $dbName.DIRECTORY_SEPARATOR

. $tableName.DIRECTORY_SEPARATOR

. $tableName.’.sql’;

!is_writeable ($tableBakFile) && die(“$tableBakFile not exists or unwirteable”);

//step3:start restore

$this->_TableBak->restoreTable($tableName,$tableBakFile);

}

function _restoreSomeTalbe($dbName,$TableNameList)

{

//step1:检查是否存在数据表:

foreach ($TableNameList as $tableName){

!in_array($tableName,$this->_getTableList($dbName)) && die(“指定的表名$tableName在数据库中不存在”);

}

//step2:检查是否存在数据表备份文件 以及是否可写:

foreach ($TableNameList as $tableName){

$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR

. $dbName.DIRECTORY_SEPARATOR

. $tableName.DIRECTORY_SEPARATOR

. $tableName.’.sql’;

!is_writeable ($tableBakFile) && die(“$tableBakFile not exists or unwirteable”);

}

//step3:start restore:

foreach ($TableNameList as $tableName){

$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR

. $dbName.DIRECTORY_SEPARATOR

. $tableName.DIRECTORY_SEPARATOR

. $tableName.’.sql’;

$this->_TableBak->restoreTable($tableName,$tableBakFile);

}

}

}

?>

<?php

//只有DbBak才能调用这个类

class TableBak{

var $_mysql_link_id;

var $_dbDir;

//private $_DbManager;

function TableBak($mysql_link_id,$dbDir)

{

$this->_mysql_link_id = $mysql_link_id;

$this->_dbDir = $dbDir;

}

function backupTable($tableName)

{

//step1:创建表的备份目录名:

$tableDir = $this->_dbDir.DIRECTORY_SEPARATOR.$tableName;

!is_dir($tableDir) && mkdir($tableDir);

//step2:开始备份:

$this->_backupTable($tableName,$tableDir);

}

function restoreTable($tableName,$tableBakFile)

{

set_time_limit(0);

$fileArray = @file($tableBakFile) or die("can open file $tableBakFile");

$num = count($fileArray);

mysql_unbuffered_query("DELETE FROM $tableName");

$sql = $fileArray[0];

for ($i=1;$i<$num-1;$i++){

mysql_unbuffered_query($sql.$fileArray[$i]) or (die (mysql_error()));

}

return true;

}

function _getFieldInfo($tableName){

$fieldInfo = array();

$sql="SELECT * FROM $tableName LIMIT 1";

$result = mysql_query($sql,$this->_mysql_link_id);

$num_field=mysql_num_fields($result);

for($i=0;$i<$num_field;$i++){

$field_name=mysql_field_name($result,$i);

$field_type=mysql_field_type($result,$i);

$fieldInfo[$field_name] = $field_type;

}

mysql_free_result($result);

return $fieldInfo;

}

function _quoteRow($fieldInfo,$row){

foreach ($row as $field_name=>$field_value){

$field_value=strval($field_value);

switch($fieldInfo[$field_name]){

case "blob":$row[$field_name] = "\".mysql_escape_string($field_value)."\";break;

case "string": $row[$field_name] = "\".mysql_escape_string($field_value)."\";break;

case "date":$row[$field_name] = "\".mysql_escape_string($field_value)."\";break;

case "datetime": $row[$field_name] = "\".mysql_escape_string($field_value)."\";break;

case "time":$row[$field_name] = "\".mysql_escape_string($field_value)."\";break;

case "unknown": $row[$field_name] = "\".mysql_escape_string($field_value)."\";break;

case "int":$row[$field_name] = intval($field_value); break;

case "real":$row[$field_name] = intval($field_value); break;

case "timestamp":$row[$field_name] = intval($field_value); break;

default:$row[$field_name] = intval($field_value); break;

}

}

return $row;

}

function _backupTable($tableName,$tableDir)

{

//取得表的字段类型:

$fieldInfo = $this->_getFieldInfo($tableName);

//step1:构造INSERT语句前半部分 并写入文件:

$fields = array_keys($fieldInfo);

$fields = implode(,,$fields);

$sqltext="INSERT INTO $tableName($fields)VALUES \r\n";

$datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName..sql;

(!$handle = fopen($datafile,w)) && die("can not open file $datafile");

(!fwrite($handle, $sqltext)) && die("can not write data to file $datafile");

fclose($handle);

//step2:取得数据 并写入文件:

//取出表资源:

set_time_limit(0);

$sql = "select * from $tableName";

$result = mysql_query($sql,$this->_mysql_link_id);

//打开数据备份文件:$tableName.xml

$datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName..sql;

(!$handle = fopen($datafile,a)) && die("can not open file $datafile");

//逐条取得表记录并写入文件:

while ($row = mysql_fetch_assoc($result)) {

$row = $this->_quoteRow($fieldInfo,$row);

$record=( . implode(,,$row) . ");\r\n";

(!fwrite($handle, $record)) && die("can not write data to file $datafile");

}

mysql_free_result($result);

//关闭文件:

fclose($handle);

return true;

}

}

?>

备份mybbs数据库:

SQL代码

//example 1 backup:

require_once(‘DbBak.php’);

require_once(‘TableBak.php’);

$connectid = mysql_connect(‘localhost’,’root’,’123456′);

$backupDir = ‘data’;

$DbBak = new DbBak($connectid,$backupDir);

$DbBak->backupDb(‘mybbs’);

恢复mybbs数据库:

require_once(DbBak.php);

require_once(TableBak.php);

$connectid = mysql_connect(localhost, oot,123456);

$backupDir = data;

$DbBak = new DbBak($connectid,$backupDir);

$DbBak->restoreDb(mybbs);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。