php实现mysql数据库备份类
发布时间:2020-03-12 23:44:09 所属栏目:PHP教程 来源:站长网
导读:备份程序一共只有两个类:数据库备份器(DbBak)和表备份器(TableBak): 这个程序仅仅备份和恢复数据,使用方法很简单,实例化DbBak,然后调用bakupDb和restoreDb
1、实例化DbBak需要告诉它两件事:数据服务器在哪里($connectid)、备份到哪个目录($backupDir): require_once('DbBak.php'); require_once('TableBak.php'); $connectid = mysql_connect('localhost','root','123456'); $backupDir = 'data'; $DbBak = new DbBak($connectid,$backupDir); 2、然后就可以开始备份数据库了,你不仅能够指定备份那个数据库,而且能详细设置只备份那几个表: 2.1如果你想备份mybbs库中的所有表,只要这样: $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 <b>$dbName</b> 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("指定的表名<b>$tableName</b>在数据库中不存在"); $this->_TableBak->backupTable($tableName); } function _backupSomeTalbe($dbName,$TableNameList) { foreach ($TableNameList as $tableName){ !in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在数据库中不存在"); } 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("指定的表名<b>$tableName</b>在数据库中不存在"); //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("指定的表名<b>$tableName</b>在数据库中不存在"); } //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); } } } ?> 复制代码 代码如下: (编辑:焦作站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |