前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php实现mysql数据库备份

php实现mysql数据库备份

作者头像
kl博主
发布2023-11-17 19:07:31
1580
发布2023-11-17 19:07:31
举报
文章被收录于专栏:kl的专栏kl的专栏

之前看过很多数据库的备份的功能,今天有时间自己也琢磨一下,实现思路就是生成sql脚本文件,我想也没几个会去硬备份文件库文件的吧?下面把详细的代码贴出来,实现过程中遇到 了诸多的问题,就不一一列出来了,代码关键易出错的部分备注的很详细,下面就看看代码吧(此实现基于thinkphp框架)

代码语言:javascript
复制
query("SHOW TABLE STATUS FROM "."`".C('DB_NAME')."`");//查询所有的库
		$tables = array();
        foreach ($list as $key => $val)
		{
			$tables[$key]['name'] = $val['Name'];//表名
			$tables[$key]['rows'] = $val['Rows'];//记录数
			$tables[$key]['engine'] = $val['Engine'];//引擎
			$tables[$key]['data_length'] = sizecount($val['Data_length']);//表大小
			$tables[$key]['create_time']=$val['Create_time'];//表创建时间
			$tables[$key]['collation']=$val['Collation'];//编码类型
        }
		$this->assign('list',$tables);//将数据传到页面,让用户选择备份的表
		$this->display();    
    }
    
    //数据备份
    public function backup(){
        $tbs = $_POST['tables'];//获得所有的表名
        if(!$tbs){
            $this->error('请选中记录!');
        }
        //初始化将要保存的sql字符串。设置外键约束失效,防止数据还原时,原表的外键约束干扰表的删除
        $data = "SET FOREIGN_KEY_CHECKS = 0;\n";
        foreach($tbs as $tab){
            $obj = M($tab);//实例化一个表模型
            $row = $obj->query("SHOW CREATE TABLE $tab");
            $data .= "DROP TABLE IF EXISTS `".$tab."`;\n" . $row[0]['Create Table'] . ";\n";//如果存在这个表就删除
             //$row[0]['Create Table']//这个包含了创建表的信息
            $datalist = $obj->select();//依次查询每个表的数据         
            foreach($datalist as $val){
                $data .= "INSERT INTO `".$tab."` VALUES (";
                $vals = array();
                foreach($val as $v){  
                    if($v=="")
                    {
                        $vals[] = 'NULL';//解决mysql5.0以上空字符串报错的问题
                    }
                    else 
                    {
                         $vals[] = "'" . $v . "'";
                    }
                }
                $data .= implode(', ', $vals) . ");\n";//implode:把数组用,组装成字符串
            }
            $data .= "\n";     
        }
        $data.="SET FOREIGN_KEY_CHECKS = 1;\n";//把外键约束重新设置回来
       //------------------以上脚本sql拼接完成了,下面把这个字符串保存起来------------------
        $datadir = 'backupdata/';//保存备份文件的文件夹
        $filename = $datadir . C('DB_NAME')."_" . time() . ".sql";//保存的文件名
        if(!$fp = @fopen($filename, "w+")){//创建文件
            echo "提示:在创建文件时遇到错误!";
           $this->error('备份数据失败!');
        }
        if(!@fwrite($fp, $data)){//写入文件
            echo "提示:在写入信息时遇到错误!";
            fclose($fp);
            unlink($filename);//如果写入失败。就删除刚刚创建的文件
             $this->error('备份数据失败!');
        }
        fclose($fp);
        $this->success('备份数据成功!');  
    }

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档