网站地图    收藏   

主页 > php专栏 > php类库 >

php类实现MySQL数据库备份、还原 - php类库

来源:自学PHP网    时间:2014-11-30 12:53 作者: 阅读:

[导读] 这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可,下面我们一起来看这个例子,代码如下:?php/***创建时间:2012年5月21日...

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

这是一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可,下面我们一起来看这个例子,代码如下:

  1. <?php   
  2. /**  
  3.  * 创建时间: 2012年5月21日  
  4.  *  
  5.  * 说明:分卷文件是以_v1.sql为结尾(20120522021241_all_v1.sql)  
  6.  * 功能:实现mysql数据库分卷备份,选择表进行备份,实现单个sql文件及分卷sql导入  
  7.  * 使用方法:  
  8.  *  
  9.  * ------1. 数据库备份(导出)------------------------------------------------------------  
  10. //分别是主机,用户名,密码,数据库名,数据库编码  
  11. $db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );  
  12. // 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)  
  13. $db->backup ();  
  14.  * ------2. 数据库恢复(导入)------------------------------------------------------------  
  15. //分别是主机,用户名,密码,数据库名,数据库编码  
  16. $db = new DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' );  
  17. //参数:sql文件  
  18. $db->restore ( './backup/20120516211738_all_v1.sql');  
  19.  *----------------------------------------------------------------------  
  20.  */  
  21. class DBManage   
  22. {   
  23.     var $db// 数据库连接   
  24.     var $database// 所用数据库   
  25.     var $sqldir// 数据库备份文件夹   
  26.     var $record;   
  27.     // 换行符   
  28.     private $ds = "n";   
  29.     // 存储SQL的变量   
  30.     public $sqlContent = "";   
  31.     // 每条sql语句的结尾符   
  32.     public $sqlEnd = ";";   
  33.     /**  
  34.      * 初始化  
  35.      *  
  36.      * @param string $host  
  37.      * @param string $username  
  38.      * @param string $password  
  39.      * @param string $thisatabase  
  40.      * @param string $charset  
  41.      */  
  42.     function __construct($host = 'localhost'$username = 'root'$password = ''$thisatabase = 'test'$charset = 'utf8')   
  43.     {   
  44.         $this->host = $host;   
  45.         $this->username = $username;   
  46.         $this->password = $password;   
  47.         $this->database = $thisatabase;   
  48.         $this->charset = $charset;   
  49.         // 连接数据库   
  50.         $this->db = mysql_connect ( $this->host, $this->username, $this->password ) or die ( "数据库连接失败." );   
  51.         // 选择使用哪个数据库   
  52.         mysql_select_db ( $this->database, $this->db ) or die ( "无法打开数据库" );   
  53.         // 数据库编码方式   
  54.         mysql_query ( 'SET NAMES ' . $this->charset, $this->db );   
  55.     }   
  56.     
  57.     /*  
  58.       * ------------------------------------------数据库备份start----------------------------------------------------------  
  59.       */  
  60.     
  61.     /**  
  62.      * 数据库备份  
  63.      * 参数:备份哪个表(可选),备份目录(可选,默认为backup),分卷大小(可选,默认2000,即2M)  
  64.      *  
  65.      * @param $string $dir  
  66.      * @param int $size  
  67.      * @param $string $tablename  
  68.      */  
  69.     function backup($tablename = ''$dir = ''$size = 2000)   
  70.     {   
  71.         //$dir = $dir ? $dir : 'backup/';   
  72.         //$size = $size ? $size : 2000;   
  73.         $sql = '';   
  74.         // 只备份某个表   
  75.         if (! emptyempty ( $tablename ))   
  76.         {   
  77.             echo '正在备份表' . $tablename . '<br />';   
  78.             // 插入dump信息   
  79.             $sql = $this->_retrieve();   
  80.             // 插入表结构信息   
  81.             $sql .= $this->_insert_table_structure ( $tablename );   
  82.             // 插入数据   
  83.             $data = mysql_query ( "select * from " . $tablename );   
  84.             // 文件名前面部分   
  85.             $filename = date ( 'YmdHis' ) . "_" . $tablename;   
  86.             // 字段数量   
  87.             $num_fields = mysql_num_fields ( $data );   
  88.             // 第几分卷   
  89.             $p = 1;   
  90.             // 循环每条记录   
  91.             while ( $record = mysql_fetch_array ( $data ) )   
  92.             {   
  93.                 // 单条记录   
  94.                 $sql .= $this->_insert_record ( $tablename$num_fields$record );   
  95.                 // 如果大于分卷大小,则写入文件   
  96.                 if (strlen ( $sql ) >= $size * 1000)   
  97.                 {   
  98.                     $file = $filename . "_v" . $p . ".sql";   
  99.                     if ($this->_write_file ( $sql$file$dir ))   
  100.                     {   
  101.                         echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />";   
  102.                     }   
  103.                     else  
  104.                     {   
  105.                         echo "备份表-" . $tablename . "-失败<br />";   
  106.                     }   
  107.                     // 下一个分卷   
  108.                     $p ++;   
  109.                     // 重置$sql变量为空,重新计算该变量大小   
  110.                     $sql = "";   
  111.                 }   
  112.             }   
  113.             // sql大小不够分卷大小   
  114.             if ($sql != "")   
  115.             {   
  116.                 $filename .= "_v" . $p . ".sql";   
  117.                 if ($this->_write_file ( $sql$filename$dir ))   
  118.                 {   
  119.                     echo "表-" . $tablename . "-卷-" . $p . "-数据备份完成,生成备份文件 <span style='color:#f00;'>$dir$filename</span><br />";   
  120.                 }   
  121.                 else  
  122.                 {   
  123.                     echo "备份卷-" . $p . "-失败<br />";   
  124.                 }   
  125.             }   
  126.         }   
  127.         else  
  128.         { // 备份全部表   
  129.             if ($tables = mysql_query ( "show table status from " . $this->database ))   
  130.             {   
  131.                 echo "读取数据库结构成功!<br />";   
  132.             }   
  133.             else  
  134.             {   
  135.                 exit ( "读取数据库结构成功!<br />" );   
  136.             }   
  137.             // 插入dump信息   
  138.             $sql .= $this->_retrieve();   
  139.             // 文件名前面部分   
  140.             $filename = date ( 'YmdHis' ) . "_all";   
  141.             // 查出所有表   
  142.             $tables = mysql_query ( 'SHOW TABLES' );   
  143.             // 第几分卷   
  144.             $p = 1;   
  145.             // 循环所有表   
  146.             while ( $table = mysql_fetch_array ( $tables ) )   <

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论