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

复制代码 代码如下:

  <?php

  $cfg_dbhost ='localhost';//mysql主机

  $cfg_dbname ='sq_test';//数据库名

  $cfg_dbuser ='root';//数据库用户名

  $cfg_dbpwd ='glzy8.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天以前的备份";

  ?>