这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可,下面我们一起来看这个例子,代码如下:
backup ();
* ------2. 数据库恢复(导入)------------------------------------------------------------
//分别是主机,用户名,密码,数据库名,数据库编码
$db = new DBManage ( 'localhost','utf8' );
//参数:sql文件
$db->restore ( './backup/20120516211738_all_v1.sql');
*----------------------------------------------------------------------
*/
class DBManage
{
var $db; // 数据库连接
var $database; // 所用数据库
var $sqldir; // 数据库备份文件夹
var $record;
// 换行符
private $ds = "n";
// 存储SQL的变量
public $sqlContent = "";
// 每条sql语句的结尾符
public $sqlEnd = ";";
/**
* 初始化
*
* @param string $host
* @param string $username
* @param string $password
* @param string $thisatabase
* @param string $charset
*/
function __construct($host = 'localhost',$username = 'root',$password = '',$thisatabase = 'test',$charset = 'utf8')
{
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->database = $thisatabase;
$this->charset = $charset;
// 连接数据库
$this->db = mysql_connect ( $this->host,$this->username,$this->password ) or die ( "数据库连接失败." );
// 选择使用哪个数据库
mysql_select_db ( $this->database,$this->db ) or die ( "无法打开数据库" );
// 数据库编码方式
mysql_query ( 'SET NAMES ' . $this->charset,$this->db );
}
/*
- ------------------------------------------数据库备份start----------------------------------------------------------
*/
/**
- 数据库备份
- 参数:备份哪个表(可选),默认2000,即2M)
-
- @param $string $dir
- @param int $size
- @param $string $tablename
/
function backup($tablename = '',$dir = '',$size = 2000)
{
//$dir = $dir ? $dir : 'backup/';
//$size = $size ? $size : 2000;
$sql = '';
// 只备份某个表
if (! emptyempty ( $tablename ))
{
echo '正在备份表' . $tablename . '
';
// 插入dump信息
$sql = $this->_retrieve();
// 插入表结构信息
$sql .= $this->_insert_table_structure ( $tablename );
// 插入数据
$data = mysql_query ( "select from " . $tablename );
// 文件名前面部分
$filename = date ( 'YmdHis' ) . "_" . $tablename;
// 字段数量
$num_fields = mysql_num_fields ( $data );
// 第几分卷
$p = 1;
// 循环每条记录
while ( $record = mysql_fetch_array ( $data ) )
{
// 单条记录
$sql .= $this->_insert_record ( $tablename,$num_fields,$record );
// 如果大于分卷大小,则写入文件
if (strlen ( $sql ) >= $size 1000)
{
$file = $filename . "_v" . $p . ".sql";
if ($this->_write_file ( $sql,$file,$dir ))
{
echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 $dir$filename
";
}
else
{
echo "备份表-" . $tablename . "-失败
";
}
// 下一个分卷
$p ++;
// 重置$sql变量为空,重新计算该变量大小
$sql = "";
}
}
// sql大小不够分卷大小
if ($sql != "")
{
$filename .= "_v" . $p . ".sql";
if ($this->_write_file ( $sql,$filename,生成备份文件 $dir$filename
";
}
else
{
echo "备份卷-" . $p . "-失败
";
}
}
}
else
{ // 备份全部表
if ($tables = mysql_query ( "show table status from " . $this->database ))
{
echo "读取数据库结构成功!
";
}
else
{
exit ( "读取数据库结构成功!
" );
}
// 插入dump信息
$sql .= $this->_retrieve();
// 文件名前面部分
$filename = date ( 'YmdHis' ) . "_all";
// 查出所有表
$tables = mysql_query ( 'SHOW TABLES' );
// 第几分卷
$p = 1;
// 循环所有表
while ( $table = mysql_fetch_array ( $tables ) )
{
// 获取表名
$tablename = $table [0];
// 获取表结构
$sql .= $this->_insert_table_structure ( $tablename );
$data = mysql_query ( "select from " . $tablename );
$num_fields = mysql_num_fields ( $data );
// 循环每条记录
while ( $record = mysql_fetch_array ( $data ) )
{
// 单条记录
$sql .= $this->_insert_record ( $tablename,$record );
// 如果大于分卷大小,则写入文件
if (strlen ( $sql ) >= $size * 1000)
{
$file = $filename . "_v" . $p . ".sql";
// 写入文件
if ($this->_write_file ( $sql,$dir ))
{
echo "-卷-" . $p . "-数据备份完成,生成备份文件$dir$file
";
}
else
{
echo "备份卷-" . $p . "-失败
";
}
// 下一个分卷
$p ++;
// 重置$sql变量为空,重新计算该变量大小
$sql = "";
}
}
}
// sql大小不够分卷大小
if ($sql != "")
{
$filename .= "_v" . $p . ".sql";
if ($this->_write_file ( $sql,生成备份文件 $dir$filename
";
}
else
{
echo "备份卷-" . $p . "-失败
";
}
}
}
}
/**
- 插入数据库备份基础信息
-
- @return string
*/
private function _retrieve() {
$value = '';
$value .= '--' . $this->ds;
$value .= '-- MySQL database dump' . $this->ds;
$value .= '-- Created by DBManage class,Power By yanue. ' . $this->ds;
$value .= '-- http://yanue.net ' . $this->ds;
$value .= '--' . $this->ds;
$value .= '-- 主机: ' . $this->host . $this->ds;
$value .= '-- 生成日期: ' . date ( 'Y' ) . ' 年 ' . date ( 'm' ) . ' 月 ' . date ( 'd' ) . ' 日 ' . date ( 'H:i' ) . $this->ds;
$value .= '-- MySQL版本: ' . mysql_get_server_info () . $this->ds;
$value .= '-- PHP 版本: ' . phpversion () . $this->ds;
$value .= $this->ds;
$value .= '--' . $this->ds;
$value .= '-- 数据库: ' . $this->database . '' . $this->ds;
$value .= '--' . $this->ds . $this->ds;
$value .= '-- -------------------------------------------------------';
$value .= $this->ds . $this->ds;
return $value;
}
/**
- 插入表结构
-
- @param unknown_type $table
- @return string
*/
private function _insert_table_structure($table) {
$sql = '';
$sql .= "--" . $this->ds;
$sql .= "-- 表的结构" . $table . $this->ds;
$sql .= "--" . $this->ds . $this->ds;
// 如果存在则删除表
$sql .= "DROP TABLE IF EXISTS " . $table . '' . $this->sqlEnd . $this->ds;
// 获取详细表信息
$res = mysql_query ( 'SHOW CREATE TABLE ' . $table . '' );
$row = mysql_fetch_array ( $res );
$sql .= $row [1];
$sql .= $this->sqlEnd . $this->ds;
// 加上
$sql .= $this->ds;
$sql .= "--" . $this->ds;
$sql .= "-- 转存表中的数据 " . $table . $this->ds;
$sql .= "--" . $this->ds;
$sql .= $this->ds;
return $sql;
}
/**
- 插入单条记录
-
- @param string $table
- @param int $num_fields
- @param array $record
- @return string
*/
private function _insert_record($table,$record) {
// sql字段逗号分割
$insert = $comma = "";
$insert .= "INSERT INTO " . $table . " VALUES(";
// 循环每个子段下面的内容
for($i = 0; $i < $num_fields; $i ++) {
$insert .= ($comma . "'" .mysql_real_escape_string ( $record [$i] ) . "'");
$comma = ",";
}
$insert .= ");" . $this->ds;
return $insert;
}
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!