时间:2021-07-21人气:-
用php实现的备份MySQL数据库的代码,需要的朋友可以参考下。<?php$cfg_dbhost ='localhost';//mysql主机$cfg_dbname ='sq_test';//数据库名$cfg_dbuser ='root';//数据库用户名$cfg_dbpwd ='jb51.net';//数据库用户密码$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")." */rnDROP TABLE IF EXISTS `$t`;rn".$s1['Create Table'].";rnrn";$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);rn";}$mysql.="rn";filein($filename,$t,$mysql);}echo "数据备份成功,生成备份文件 ".getcwd()."/".$filename."/<br/>程序自动清理5天以前的备份";?>
上篇:MYSQL主从库不同步故障一例解决方法
下篇:MySQL高级查询方法:记录查询