PHP实现MYSQL的备份还原
2019-07-24 08:55:19来源:爱站网 阅读 ()
如何才能实现MYSQL的备份还原呢?对于MYSQL的备份还原相信很多人还是不理解的,接下来的内容就是爱站小编为大家整理关于PHP实现MYSQL的备份还原的内容,感兴趣的小伙伴们一起来看看吧。
一、新建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]} --\r\n";
??????????? $sql.="{$temp[1]}";
??????????? $sql.=";-- <xjx> --\r\n\r\n";
??????? }
??????? return $sql;
??? }
注:$sql.=";-- <xjx> --\r\n\r\n"; 每句SQL后面必须加上分号(;)分割,MYSQL导入才能识别。-- <xjx> -- 是程序对SQL语句分割的标识,可以自定义但必须是注释语句,否则影响SQL语句。\r\n无实际意义用于文本美观
五、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 --\r\n";
??????????? $sql.="INSERT INTO `$v` VALUES\r\n";???????
??????????? 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.="),\r\n";
??????????? }
??????????? $sql=mb_substr($sql, 0, -3);
??????????? $sql.=";-- <xjx> --\r\n\r\n";???
??????? }
??????? return $sql;
??? }
注:
1.无数据返回时必须跳出本次循环,避免生成多余代码
2.当字段值为(NULL)时,插入字符为(NULL)而不是('NULL'),没有单引号。3.$v2=mysql_real_escape_string($v2),这是必要的转义
4.mb_substr($sql, 0, -1)、mb_substr($sql, 0, -3),必须去除最后一个逗号(,) 否则SQL语句出错5.$sql.=";-- <xjx> --\r\n\r\n",详见第四步注
六、备份操作
?
?
/**
???? * 备份 ...
???? * @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]} --\r\n";
??????????? $sql.="{$temp[1]}";
??????????? $sql.=";-- <xjx> --\r\n\r\n";
??????? }
??????? 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 --\r\n";
??????????? $sql.="INSERT INTO `$v` VALUES\r\n";???????
??????????? 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.="),\r\n";
??????????? }
??????????? $sql=mb_substr($sql, 0, -3);
??????????? $sql.=";-- <xjx> --\r\n\r\n";???
??????? }
??????? 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);
本文主要介绍的就是PHP实现MYSQL的备份还原,当你看完并理解了其中的思路,相信你也可以快速地用你熟悉的语言自己写出来。?
原文链接:https://js.aizhan.com/data/mysql/7432.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MySQL replace函数怎么替换字符串语句 2020-03-09
- PHP访问MySQL查询超时怎么办 2020-03-09
- mysql登录时闪退 2020-02-27
- MySQL出现1067错误号 2020-02-27
- mysql7.x如何单独安装mysql 2020-02-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash