0

0

postgresql数据库 php实现mysql数据库备份类

php中文网

php中文网

发布时间:2016-07-29 08:37:27

|

1128人浏览过

|

来源于php中文网

原创

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 $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         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:检查是否存在所有数据表的备份文件 以及是否可写:    
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("指定的表名$tablename在数据库中不存在");    
//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("指定的表名$tablename在数据库中不存在");    
}    
//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);    
}    
}    
}    
?>     

复制代码 代码如下:

立即学习PHP免费学习笔记(深入)”;


//只有DbBak才能调用这个类     
class TableBak{     
var $_mysql_link_id;     
var $_dbDir;     
//private $_DbManager;     
function TableBak($mysql_link_id,$dbDir)     
{     
$this->_mysql_link_id = $mysql_link_id;     
$this->_dbDir = $dbDir;     
}     
function backupTable($tableName)     
{     
//step1:创建表的备份目录名:     
$tableDir = $this->_dbDir.DIRECTORY_SEPARATOR.$tableName;     
!is_dir($tableDir) && mkdir($tableDir);     
//step2:开始备份:     
$this->_backupTable($tableName,$tableDir);     
}     
function restoreTable($tableName,$tableBakFile)     
{     
set_time_limit(0);     
$fileArray = @file($tableBakFile) or die("can open file $tableBakFile");     
$num = count($fileArray);     
mysql_unbuffered_query("DELETE FROM $tableName");     
$sql = $fileArray[0];     
for ($i=1;$imysql_unbuffered_query($sql.$fileArray[$i]) or (die (mysql_error()));     
}     
return true;     
}     
function _getFieldInfo($tableName){     
$fieldInfo = array();     
$sql="SELECT * FROM $tableName LIMIT 1";     
$result = mysql_query($sql,$this->_mysql_link_id);     
$num_field=mysql_num_fields($result);     
for($i=0;$i$field_name=mysql_field_name($result,$i);     
$field_type=mysql_field_type($result,$i);     
$fieldInfo[$field_name] = $field_type;     
}     
mysql_free_result($result);     
return $fieldInfo;     
}     
function _quoteRow($fieldInfo,$row){     
foreach ($row as $field_name=>$field_value){     
$field_value=strval($field_value);     
switch($fieldInfo[$field_name]){       
case "blob":     $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;         
case "string": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;       
case "date":     $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;       
case "datetime": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;       
case "time":     $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;       
case "unknown":   $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;         
case "int":     $row[$field_name] = intval($field_value); break;     
case "real":     $row[$field_name] = intval($field_value); break;     
case "timestamp":$row[$field_name] = intval($field_value); break;     
default:     $row[$field_name] = intval($field_value); break;     
}     
}     
return $row;     
}     
function _backupTable($tableName,$tableDir)     
{     
//取得表的字段类型:     
$fieldInfo = $this->_getFieldInfo($tableName);     
//step1:构造INSERT语句前半部分 并写入文件:     
$fields = array_keys($fieldInfo);     
$fields = implode(',',$fields);     
$sqltext="INSERT INTO $tableName($fields)VALUES \r\n";     
$datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql';     
(!$handle = fopen($datafile,'w')) && die("can not open file $datafile");     
(!fwrite($handle, $sqltext))   && die("can not write data to file $datafile");     
fclose($handle);     
//step2:取得数据 并写入文件:     
//取出表资源:     
set_time_limit(0);     
$sql = "select * from $tableName";     
$result = mysql_query($sql,$this->_mysql_link_id);     
//打开数据备份文件:$tableName.xml     
$datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql';     
(!$handle = fopen($datafile,'a')) && die("can not open file $datafile");     
//逐条取得表记录并写入文件:     
while ($row = mysql_fetch_assoc($result)) {     
$row = $this->_quoteRow($fieldInfo,$row);      
$record='(' . implode(',',$row) . ");\r\n";     
(!fwrite($handle, $record))   && die("can not write data to file $datafile");     
}     
mysql_free_result($result);     
//关闭文件:     
fclose($handle);     
return true;     
}     
}     
?>   

 
备份mybbs数据库:
SQL代码
//example 1 backup:    
require_once('DbBak.php');    
require_once('TableBak.php');    
$connectid = mysql_connect('localhost','root','123456');    
$backupDir = 'data';    
$DbBak = new DbBak($connectid,$backupDir);    
$DbBak->backupDb('mybbs');    
恢复mybbs数据库: 

复制代码 代码如下:

立即学习PHP免费学习笔记(深入)”;


require_once('DbBak.php');     
require_once('TableBak.php');     
$connectid = mysql_connect('localhost','root','123456');     
$backupDir = 'data';     
$DbBak = new DbBak($connectid,$backupDir);     
$DbBak->restoreDb('mybbs'); 

以上就介绍了postgresql数据库 php实现mysql数据库备份类,包括了postgresql数据库方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.4万人学习

Django 教程
Django 教程

共28课时 | 4.4万人学习

Excel 教程
Excel 教程

共162课时 | 18万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号