加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php实现MySQL数据库备份与还原类实例

发布时间:2020-05-24 03:48:34 所属栏目:PHP 来源:互联网
导读:这篇文章主要介绍了php实现MySQL数据库备份与还原类,可实现针对MySQL数据库的导入与导出功能,并且包含了针对数据库操作时的加锁与解锁等功能,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了php实现MySQL数据库备份与还原类。分享给大家供大家参考。具体分析如下:

这是一个非常简单的利用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;
    }

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读