详解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; }
注:
- 无数据返回时必须跳出本次循环,避免生成多余代码
-
当字段值为(NULL)时,插入字符为(NULL)而不是(‘NULL’),没有单引号。3.$v2=mysql_real_escape_string($v2),这是必要的转义
-
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
打赏
如果此文对你有所帮助,请随意打赏鼓励作者^_^
微信扫一扫,打赏作者吧~
标签: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],我们会很快的为您处理。