详解MYSQL的备份还原(PHP实现)

文章目录

[隐藏]

  • 一、新建dbBackup类,设置默认参数。
  • 二、添加数据库连接function。
  • 三、查询数据库表集合
  • 四、查询表结构
  • 五、INSERT INTO语句
  • 六、备份操作
  • 七、还原操作

手把手教你实现MYSQL的备份还原

示例代码用我比较熟悉的PHP,当然你看完并理解了其中的思路,相信你也可以快速地用你熟悉的语言自己写出来。

一、新建dbBackup类,设置默认参数。
class dbBackup {      public $host='localhost';    //数据库地址      public $user='root';    //登录名      public $pwd='';    //密码      public $database;    //数据库名      public $charset='utf8';    //数据库连接编码:mysql_set_charset  }  
二、添加数据库连接function。
/**       * 连接数据库 ...       */      function db() {          $con = mysql_connect($this->host,$this->user,$this->pwd);          if (!$con){              die('Could not connect');          }            $db_selected = mysql_select_db($this->database, $con);          if (!$db_selected) {              die('Can't use select db');          }            mysql_set_charset($this->charset);//设置编码            return $con;      }  
三、查询数据库表集合
/**       * 表集合 ...       */      function tblist() {          $list=array();            $rs=mysql_query("SHOW TABLES FROM $this->database");          while ($temp=mysql_fetch_row($rs)) {              $list[]=$temp[0];          }            return $list;      }  
四、查询表结构
/**       * 表结构SQL ...       */      function sqlcreate() {          $sql='';            $tb=$this->tblist();          foreach ($tb as $v) {              $rs=mysql_query("SHOW CREATE TABLE $v");              $temp=mysql_fetch_row($rs);              $sql.="-- 表的结构:{$temp[0]} --rn";              $sql.="{$temp[1]}";              $sql.=";-- <xjx> --rnrn";          }          return $sql;      }  

注:$sql.=”;– –rnrn”;每句SQL后面必须加上分号(;)分割,MYSQL导入才能识别。– — 是程序对SQL语句分割的标识,可以自定义但必须是注释语句,否则影响SQL语句。rn无实际意义用于文本美观

五、INSERT INTO语句
/**       * 数据插入SQL ...       */      function sqlinsert() {          $sql='';            $tb=$this->tblist();          foreach ($tb as $v) {              $rs=mysql_query("SELECT * FROM $v");              if (!mysql_num_rows($rs)) {//无数据返回                  continue;              }              $sql.="-- 表的数据:$v --rn";              $sql.="INSERT INTO `$v` VALUESrn";              while ($temp=mysql_fetch_row($rs)) {                  $sql.='(';                  foreach ($temp as $v2) {                      if ($v2===null) {                          $sql.="NULL,";                      }                      else {                          $v2=mysql_real_escape_string($v2);                          $sql.="'$v2',";                      }                  }                  $sql=mb_substr($sql, 0, -1);                  $sql.="),rn";              }              $sql=mb_substr($sql, 0, -3);              $sql.=";-- <xjx> --rnrn";          }            return $sql;      }  

注:

  1. 无数据返回时必须跳出本次循环,避免生成多余代码

  2. 当字段值为(NULL)时,插入字符为(NULL)而不是(‘NULL’),没有单引号。3.$v2=mysql_real_escape_string($v2),这是必要的转义

  3. mb_substr($sql, 0, -1)、mb_substr($sql, 0, -3),必须去除最后一个逗号(,) 否则SQL语句出错5.$sql.=”;– –rnrn”,详见第四步注

六、备份操作
/**       * 备份 ...       * @param $filename 文件路径       */      function beifen($filename) {          $this->db();    //连接数据库            $sql=$this->sqlcreate();          $sql2=$this->sqlinsert();          $data=$sql.$sql2;            return file_put_contents($filename, $data);      }  
七、还原操作
/**       * 还原 ...       * @param $filename 文件路径       */      function huanyuan($filename) {          $this->db();    //连接数据库            //删除数据表          $list=$this->tblist();          $tb='';          foreach ($list as $v) {              $tb.="`$v`,";          }          $tb=mb_substr($tb, 0, -1);          if ($tb) {              $rs=mysql_query("DROP TABLE $tb");              if ($rs===false) {                  return false;              }          }            //执行SQL          $str=file_get_contents($filename);          $arr=explode('-- <xjx> --', $str);          array_pop($arr);            foreach ($arr as $v) {              $rs=mysql_query($v);              if ($rs===false) {                  return false;              }          }            return true;      }  

备份示例:

$x=new dbBackup();  $x->database='test';  $rs=$x->beifen('db.sql');  var_dump($rs);  

还原示例:

$x=new dbBackup();  $x->database='test';  $rs=$x->huanyuan('db.sql');  var_dump($rs);  

完整代码:

class dbBackup {      public $host='localhost';    //数据库地址      public $user='root';    //登录名      public $pwd='';    //密码      public $database;    //数据库名      public $charset='utf8';    //数据库连接编码:mysql_set_charset        /**       * 备份 ...       * @param $filename 文件路径       */      function beifen($filename) {          $this->db();    //连接数据库            $sql=$this->sqlcreate();          $sql2=$this->sqlinsert();          $data=$sql.$sql2;            return file_put_contents($filename, $data);      }        /**       * 还原 ...       * @param $filename 文件路径       */      function huanyuan($filename) {          $this->db();    //连接数据库            //删除数据表          $list=$this->tblist();          $tb='';          foreach ($list as $v) {              $tb.="`$v`,";          }          $tb=mb_substr($tb, 0, -1);          if ($tb) {              $rs=mysql_query("DROP TABLE $tb");              if ($rs===false) {                  return false;              }          }            //执行SQL          $str=file_get_contents($filename);          $arr=explode('-- <xjx> --', $str);          array_pop($arr);            foreach ($arr as $v) {              $rs=mysql_query($v);              if ($rs===false) {                  return false;              }          }            return true;      }        /**       * 连接数据库 ...       */      function db() {          $con = mysql_connect($this->host,$this->user,$this->pwd);          if (!$con){              die('Could not connect');          }            $db_selected = mysql_select_db($this->database, $con);          if (!$db_selected) {              die('Can't use select db');          }            mysql_set_charset($this->charset);    //设置编码            return $con;      }        /**       * 表集合 ...       */      function tblist() {          $list=array();            $rs=mysql_query("SHOW TABLES FROM $this->database");          while ($temp=mysql_fetch_row($rs)) {              $list[]=$temp[0];          }            return $list;      }        /**       * 表结构SQL ...       */      function sqlcreate() {          $sql='';            $tb=$this->tblist();          foreach ($tb as $v) {              $rs=mysql_query("SHOW CREATE TABLE $v");              $temp=mysql_fetch_row($rs);              $sql.="-- 表的结构:{$temp[0]} --rn";              $sql.="{$temp[1]}";              $sql.=";-- <xjx> --rnrn";          }          return $sql;      }        /**       * 数据插入SQL ...       */      function sqlinsert() {          $sql='';            $tb=$this->tblist();          foreach ($tb as $v) {              $rs=mysql_query("SELECT * FROM $v");              if (!mysql_num_rows($rs)) {//无数据返回                  continue;              }              $sql.="-- 表的数据:$v --rn";              $sql.="INSERT INTO `$v` VALUESrn";              while ($temp=mysql_fetch_row($rs)) {                  $sql.='(';                  foreach ($temp as $v2) {                      if ($v2===null) {                          $sql.="NULL,";                      }                      else {                          $v2=mysql_real_escape_string($v2);                          $sql.="'$v2',";                      }                  }                  $sql=mb_substr($sql, 0, -1);                  $sql.="),rn";              }              $sql=mb_substr($sql, 0, -3);              $sql.=";-- <xjx> --rnrn";          }            return $sql;      }  }  //备份  //$x=new dbBackup();  //$x->database='test';  //$rs=$x->beifen('db.sql');  //var_dump($rs);  //还原  //$x=new dbBackup();  //$x->database='test';  //$rs=$x->huanyuan('db.sql');  //var_dump($rs);  

原文出处:teakki -> https://www.teakki.com/p/57e22e11a16367940da64038https://www.teakki.com/p/57e22e11a16367940da64038

打赏

如果此文对你有所帮助,请随意打赏鼓励作者^_^

微信扫一扫支付

微信logo微信扫一扫,打赏作者吧~

标签:mysqlPHP

相关推荐

  • 避坑!用 Docker 搞定 PHP 开发环境搭建(Mac、Docker、Nginx、PHP-FPM、XDebug、PHPStorm、VSCode)
  • 在CentOS上安装搭建PHP+Apache+Mysql的服务器环境方法
  • Ubuntu 18.04 源码编译安装PHP7.3.5详细过程
  • CentOS 7 安装 PHP 7.2
  • WordPress 教程:如何通过 PHP 代码修改表结构和索引
  • PHP 和 Python 基于 UDP 协议操作 memcached
  • Centos 7安装Nginx+PHP+MariaDB环境搭建WordPress博客
  • Apache、Nginx、php-fpm为PHP设置、添加$_SERVER服务器环境变量
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。