1. To instantiate DbBak, you need to tell it two things: where the data server is ($connectid) and which directory to back up to ($backupDir):
require_once('DbBak.php');
require_once( 'TableBak.php');
$connectid = mysql_connect('localhost','root','123456');
$backupDir = 'data';
$DbBak = new DbBak($connectid, $backupDir);
2. Then you can start backing up the database. Not only can you specify which database to back up, but you can also set up detailed settings to back up only those tables:
2.1 If you want to back up the mybbs library For all tables, just do this:
$DbBak->backupDb('mybbs');
2.2 If you only want to back up the board, face, and friendlist tables in the mybbs library, you can use Specify a one-dimensional array:
$DbBak->backupDb('mybbs',array('board','face','friendsite'));
2.3 If you only want to backup A table, such as the board table:
$DbBak->backupDb('mybbs','board');
3, data recovery:
For the three cases 2.1, 2.1, and 2.3, as long as the corresponding Modify the statement and replace backupDb with restoreDb to achieve data recovery:
$DbBak->restoreDb('mybbs');
SQL code
$DbBak->restoreDb(' mybbs',array('board','face','friendsite'));
PHP code
$DbBak->restoreDb('mybbs','board');
PHP code
require_once('TableBak.php');
class DbBak {
var $_mysql_link_id;
var $_dataDir;
var $_tableList; 🎜> 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: Select database:
mysql_select_db($dbName);
//step2: Create database backup directory
$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR. $dbName;
!is_dir($dbDir) && mkdir($dbDir);
//step3: Get all table names in the database and start backing up the table
$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)){ || strlen($table)==0 ) && die('....');
}
$this->_backupSomeTalbe($dbName,$tableName); >}
}
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: Check whether the backup files of all data tables exist and whether they are writable:
foreach ($this->_getTableList($ dbName) as $tableName){
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
. $dbName.DIRECTORY_SEPARATOR
. $tableName.DI RECTORY_SEPARATOR 🎜>!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_SE PARATOR this->_TableBak->restoreTable($tableName,$tableBakFile);
}
}
function _restoreOneTable($dbName,$tableName)
{
//step1 :Check whether the data table exists:
!in_array($tableName,$this->_getTableList($dbName)) && die("The specified table name$tableName does not exist in the database ");
//step2: Check whether the data table backup file exists and whether it is writable:
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
. $dbName.DIRECTORY_SEPARATOR
. $tableName .DIRECTORY_SEPARATOR . 🎜>$this ->_TableBak->restoreTable($tableName,$tableBakFile);
}
function _restoreSomeTalbe($dbName,$TableNameList)
{
//step1: Check whether the data table exists:
foreach ($TableNameList as $tableName){
!in_array($tableName,$this->_getTableList($dbName)) && die("The specified table name$tableNamein Does not exist in the database");
}
//step2: Check whether the data table backup file exists and whether it is writable:
foreach ($TableNameList as $tableName){
$tableBakFile = $this ->_dataDir.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);
}
}
}
?>