备份mysql数据库的php代码(一个表一个文件)


Posted in PHP onMay 28, 2010
<?php 
$cfg_dbhost ='localhost';//mysql主机 
$cfg_dbname ='sq_test';//数据库名 
$cfg_dbuser ='root';//数据库用户名 
$cfg_dbpwd ='3water.com';//数据库用户密码 
$cfg_db_language ='utf8';//数据库编码 class dbmysql{ 
public static $dbhost = 'localhost'; 
public static $dbname; 
public static $dbuser = 'root'; 
public static $dbpass; 
public static $charset = 'utf8'; 
public static $DB = null; 
public $querycount = 0; 
public function __construct() 
{ 
self::$dbhost = $GLOBALS['cfg_dbhost']; 
self::$dbname = $GLOBALS['cfg_dbname']; 
self::$dbuser = $GLOBALS['cfg_dbuser']; 
self::$dbpass = $GLOBALS['cfg_dbpwd']; 
self::$charset= $GLOBALS['cfg_db_language']; 
self::connect(); 
} 
public function connect(){ 
self::$DB=mysql_connect(self::$dbhost,self::$dbuser,self::$dbpass); 
if(!self::$DB){ 
self::sqlError('无法连接服务器!'.self::mysqlerror);exit("无法连接服务器!");; 
} 
if(!mysql_select_db(self::$dbname)){ 
self::sqlError('无法连接数据库('.self::$dbname.')!'.self::mysqlerror);exit("无法连接数据库!"); 
} 
mysql_query("SET NAMES '".self::$charset."', character_set_client=binary, sql_mode='';",self::$DB); 
} 
private function mysqlerror(){ 
return mysql_error(); 
} 
public function getTablesName(){ 
$res = mysql_query('SHOW TABLES FROM '.self::$dbname,self::$DB); 
$tables=array(); 
while ($row=mysql_fetch_row($res))$tables[]=$row[0]; 
mysql_free_result($res); 
return $tables; 
} 
public function getFields($table){ 
$res=mysql_query('DESCRIBE '.$table,self::$DB); 
$tables=array(); 
while($row=mysql_fetch_row($res))$tables[]=$row[0]; 
mysql_free_result($res); 
return $tables; 
} 
public function fetch_array($sql){ 
$res=mysql_query($sql,self::$DB); 
$r=mysql_fetch_array($res); 
mysql_free_result($res); 
return $r; 
} 
public function fetch_assoc($sql){ 
$q3=mysql_query($sql,self::$DB); $ra=array(); 
while($data=mysql_fetch_assoc($q3)){ 
$ra[]=$data; 
} 
mysql_free_result($q3); 
return $ra; 
} 
private function sqlError($message='',$info ='',$sql=''){//保存错误信息到文件 
echo "{".$message."<br/>DATE: ".date('Y-n-j H:i:s')."<br/>ERROR: ".$info."<br/>SQL: ".$sql."<br/>}<br/>"; 
} 
public function close(){ 
self::$DB =null; 
} 
public function __destruct() 
{ 
self::close(); 
} 
} 
/*---class end*/ 
function makedir($dirpath){ 
if(!$dirpath) return 0; 
$dirpath=str_replace("\\","/",$dirpath); $mdir=""; 
foreach(explode("/",$dirpath) as $val){ 
$mdir.=$val."/"; 
if($val==".."||$val==".")continue; 
if(!is_dir($mdir)&&!file_exists($mdir)){ 
if(!@mkdir($mdir,0755)){ 
exit("创建目录 [".$mdir."]失败."); 
} 
} 
} 
return true; 
} 
function delDirAndFile($dirName){ 
if($handle=opendir($dirName)){ 
while(false!==($item = readdir($handle))){ 
if($item !="."&&$item!=".."){ 
if(is_dir( "$dirName/$item")){ 
delDirAndFile( "$dirName/$item"); 
}else{ unlink("$dirName/$item"); } 
} 
} 
closedir( $handle ); 
if( rmdir( $dirName ) )echo "成功删除目录: $dirName<br/>\n"; 
} 
} 
function filein($filename="databak/",$table='',$mysql=''){ 
$fp = fopen($filename.'/'.$table.'.sql','w'); 
fputs($fp,$mysql); 
fclose($fp); 
} 
header("Content-Type:text/html;charset=utf-8"); 
$db=new dbmysql(); 
$table=$db->getTablesName(); 
$filename="databak/".date("Ymd"); 
$url=getcwd()."/databak/"; 
$handle = opendir($url); 
while(false!==($file = readdir($handle))){ 
if ($file!="."&&$file!=".."&&is_dir($url."/".$file)) { 
if(date("Ymd")-$file>5){delDirAndFile($url."/".$file);}; 
} 
} 
makedir($filename); 
foreach($table as $t){ 
$s1=$db->fetch_array("show create table `$t`"); 
$mysql="/*Time:".date("Y-m-d H:i:s")." */\r\nDROP TABLE IF EXISTS `$t`;\r\n".$s1['Create Table'].";\r\n\r\n"; 
$a1=$db->fetch_assoc("select * from `$t`"); 
foreach ($a1 as $data){ 
$vals=array_values($data); 
$vals=array_map('addslashes',$vals); 
$vals=join("','",$vals); 
$vals="'".$vals."'"; 
$mysql.="INSERT INTO `$t` VALUES ($vals);\r\n"; 
} 
$mysql.="\r\n"; 
filein($filename,$t,$mysql); 
} 
echo "数据备份成功,生成备份文件 
".getcwd()."/".$filename."/<br/>程序自动清理5天以前的备份"; 
?>
PHP 相关文章推荐
PHP5 安装方法
Oct 09 PHP
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
mysql 搜索之简单应用
Apr 27 PHP
一些被忽视的PHP函数(简单整理)
Apr 30 PHP
PHP简洁函数小结
Aug 12 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
Jul 15 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
PHP strripos函数用法总结
Feb 11 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 #PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 #PHP
PHP 可阅读随机字符串代码
May 26 #PHP
PHP 一个随机字符串生成代码
May 26 #PHP
PHP 循环列出目录内容的函数代码
May 26 #PHP
PHP 删除一个目录及目录下的所有文件的函数代码
May 26 #PHP
PHP JSON 数据解析代码
May 26 #PHP
You might like
PHP 面向对象 final类与final方法
2010/05/05 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
PHP date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
google地图的路线实现代码
2009/08/20 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
Vue概念及常见命令介绍(1)
2016/12/08 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
jquery检测上传文件大小示例
2020/04/26 jQuery
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
Python 的 Socket 编程
2015/03/24 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
使用tensorflow实现线性回归
2018/09/08 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
softmax及python实现过程解析
2019/09/30 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
毕业生个人求职信范文分享
2014/01/05 职场文书
党小组评议意见
2015/06/02 职场文书
退货证明模板
2015/06/23 职场文书
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS