博客
关于我
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/

你可能感兴趣的文章
mysql 随机数 rand使用
查看>>
MySQL 面试题汇总
查看>>
MySQL 面试,必须掌握的 8 大核心点
查看>>
MySQL 高可用性之keepalived+mysql双主
查看>>
MySQL 高性能优化规范建议
查看>>
mysql 默认事务隔离级别下锁分析
查看>>
Mysql--逻辑架构
查看>>
MySql-2019-4-21-复习
查看>>
mysql-5.6.17-win32免安装版配置
查看>>
mysql-5.7.18安装
查看>>
MySQL-Buffer的应用
查看>>
mysql-cluster 安装篇(1)---简介
查看>>
mysql-connector-java.jar乱码,最新版mysql-connector-java-8.0.15.jar,如何愉快的进行JDBC操作...
查看>>
mysql-connector-java各种版本下载地址
查看>>
mysql-EXPLAIN
查看>>
MySQL-Explain的详解
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>
MySQL-【1】配置
查看>>
MySQL-【4】基本操作
查看>>