博客
关于我
yii 备份还原数据库
阅读量:723 次
发布时间:2019-03-21

本文共 4379 字,大约阅读时间需要 14 分钟。

备份Model:

namespace backend\models;use Yiisoft\Yii\ActiveRecord;class DbModel extends ActiveRecord{    protected $dbdata_path = "dbdata";        public function init()    {        header("Content-type: text/html;charset=utf-8");    }    /* 获取所有数据表 */    protected function getTables()    {        return Yii::$app->db->getSchema()->getTableNames();    }    /* 备份地址 */    protected function getBackUpPath()    {        $path = dirname(dirname(__FILE__)) . '/' . $this->dbdata_path;        if (!file_exists($path)) {            @mkdir($path, 0777);        }        return $path;    }    /* 文件名称 */    protected function makeFileName()    {        $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';        $name = '';        for ($i = 0; $i < 5; $i++) {            $name .= $chars[mt_rand(0, strlen($chars) - 1)];        }        return date("Ymd") . '_' . $name . '.sql';    }    /* 给字段、表名加上` */    protected function addStyle($str)    {        return "`{$str}`";    }    /* 获取表结构 */    protected function getTableStructure($table)    {        $data = Yii::$app->db->createCommand('SHOW CREATE TABLE ' . $this->addStyle($table))->queryAll();        return $data[0]['Create Table'];    }    /* 获取表数据 */    protected function getTableDatas($table)    {        $data = Yii::$app->db->createCommand('SELECT * FROM ' . $this->addStyle($table))->queryAll();        $fields = '';        $values = '';        $content = '';        foreach ($data as $key => $val) {            $fields = array_keys($val);            $values = array_values($val);            $sql = "INSERT INTO " . $this->addStyle($table) . "(";            $sql .= "`" . implode("`, `", $fields) . "`) VALUES (";            $sql .= "'" . implode("', '", $values) . "'); \r\n";            $content .= $sql;        }        return $content;    }    /* 备份数据库 */    public function backUp()    {        $tables = $this->getTables();        $path = $this->getBackUpPath();        $fileName = $this->makeFileName();        $content = "SET FOREIGN_KEY_CHECKS=0; \r\n";        foreach ($tables as $key => $val) {            $content .= "DROP TABLE IF EXISTS " . $this->addStyle($val) . "; \r\n";            $content .= $this->getTableStructure($val) . "; \r\n";            $content .= $this->getTableDatas($val) . "\r\n";        }        $back_path = $this->getBackUpPath();        $file_name = $this->makeFileName();        $file = $back_path . '/' . $file_name;        $fp = fopen($file, 'w');        @fwrite($fp, $content);        fclose($fp);    }    /* 获取所有的sql文件 */    public function getSqlFiles()    {        $path = dirname(dirname(__FILE__)) . '/' . $this->dbdata_path;        $sqls = [];        if (file_exists($path)) {            $dir_handle = @opendir($path);            while ($file = @readdir($dir_handle)) {                $file_info = pathinfo($file);                if ($file_info['extension'] == 'sql') {                    $sql['name'] = $file;                    $sql['create_time'] = date('Y-m-d', filectime($path . '/' . $file));                    $sqls[] = $sql;                }            }        }        return $sqls;    }    /** 还原数据库 */    public function recoverSqlFile($sqlFileName)    {        $path = dirname(dirname(__FILE__)) . '/' . $this->dbdata_path;        $sqlFile = $path . '/' . $sqlFileName;        if (file_exists($sqlFile)) {            $sqls = file_get_contents($sqlFile);            Yii::$app->db->createCommand($sqls)->execute();        }    }    /* 删除数据备份 */    public function deleteSqlFile($sqlFileName)    {        $path = dirname(dirname(__FILE__)) . '/' . $this->dbdata_path;        $sqlFile = $path . '/' . $sqlFileName;        if (file_exists($sqlFile)) {            @unlink($sqlFile);        }    }}

控制器:

public function actionIndex(){    $dbModel = new DbModel();    $dataProvider = $dbModel->getSqlFiles();    return $this->render('index', [        'dataProvider' => $dataProvider,    ]);}public function actionCreate(){    $dbModel = new DbModel();    $dbModel->backUp();    return $this->redirect(['index']);}public function actionUpdate($file){    $dbModel = new DbModel();    $dbModel->recoverSqlFile($file);    return $this->redirect(['index']);}public function actionDelete($file){    $dbModel = new DbModel();    $dbModel->deleteSqlFile($file);    return $this->redirect(['index']);}

转载地址:http://vkbgz.baihongyu.com/

你可能感兴趣的文章
Python基础——MySQL数据库基本操作
查看>>
Python基础_列表 list
查看>>
python基础---->常用模块
查看>>
Python基础(2):控制结构
查看>>
Python基础 | 关于“循环”那些事
查看>>
python系列【仅供参考】:python 远程rdp
查看>>
python基于flask搭建http服务(四)—— Docker容器化部署
查看>>
Python块键盘/鼠标输入
查看>>
python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
查看>>
python在gpu上运行_【python】python开启GPU加速
查看>>
Python在def函数中使用for循环
查看>>
Python在def函数中使用for循环
查看>>
Python在Conda环境中,但在Windows虚拟环境中没有激活
查看>>
python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
查看>>
python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
查看>>
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>