thinkcmf5 数据备份、恢复
第一步:composer安装第三方类库
composer require tp5er/tp5-databackup dev-master
第二步:创建控制器(路径:app/portal/controller/) AdminDatabackupController.php,引入类文件
第三步:创建前端页面 (路径:public/themes/admin_simpleboot3/portal/)
文件夹名臣与控制器名称对应 AdminDatabackup 对应 admin_databackup
第四步:后台添加菜单 子菜单 方法栏为 index,importlist
第五步:编写类方法
<?php
namespace app\portal\controller;use app\admin\model\RouteModel;
use cmf\controller\AdminBaseController;
use \tp5er\Backup;
use think\Db;
/*** 数据备份*/
class AdminDatabackupController extends AdminBaseController
{private $config=array('path' => './Data/', //数据库备份路径'part' => 20971520, //数据库备份卷大小'compress' => 0, //数据库备份文件是否启用压缩 0不压缩 1 压缩'level' => 9 //数据库备份文件压缩级别 1 普通 4 一般 9最高);// 数据类表列表public function index(){$config = $this->config;$db= new Backup($config);return $this->fetch('index',['list'=>$db->dataList()]);}// 多表备份public function backupall($tables){$config = $this->config;$db= new Backup($config);foreach ($tables as $key => $value) {$file=['name'=>date('Ymd-His'),'part'=>$config['part']];$start = $db->setFile($file)->backup($value, 0);}if ($start==0) {return $this->success('备份成功');}else{return $this->error('备份失败');}}//单表备份public function backup(){$param = $this->request->param();$config = $this->config;$db= new Backup($config);$file=['name'=>date('Ymd-His'),'part'=>$config['part']];$start = $db->setFile($file)->backup($param['table'], 0);if ($start==0) {return $this->success('备份成功');}else{return $this->error('备份失败');}}//$db->repair($tables)//修复表public function repair(){$param = $this->request->param();$config = $this->config;$db= new Backup($config);$db->repair($param['table']);return $this->success('修复成功');}// $db->optimize($tables)//优化表public function optimize(){$param = $this->request->param();$config = $this->config;$db= new Backup($config);$db->optimize($param['table']);return $this->success('优化成功');}// 备份文件列表public function importlist(){$config = $this->config;$db= new Backup($config);return $this->fetch('importlist',['list'=>$db->fileList()]);}// 导入备份文件public function import($time){$config = $this->config;$db= new Backup($config);$start= $db->import(0,$time);if ($start==0) {return $this->success('还原成功');}else{return $this->error('还原失败');}}// 删除备份文件public function del($time){$config = $this->config;$db= new Backup($config);$db->delFile($time);return $this->success('删除成功');}}
?>
前端代码index.html:
<include file="public@header"/>
</head>
<body>
<div class="wrap js-check-wrap"><ul class="nav nav-tabs"><li class="active"><a href="javascript:;">数据表</a></li></ul><form class="well form-inline margin-top-20" method="get" action="{:url('AdminDatabackup/backup')}"><a class="btn btn-primary" id="btn" >全部备份</a></form><form class="js-ajax-form" action="" method="post"><table class="table table-hover table-bordered table-list"><thead><tr><th width="15"><label><input type="checkbox" class="js-check-all" data-direction="x" data-checklist="js-check-x"></label></th><th>表名</th><th width="150">数据量</th><th width="160">数据大小</th><th width="160">备份时间</th><th width="180">操作</th></tr></thead><foreach name="list" item="vo"><tr><td><input type="checkbox" class="js-check" data-yid="js-check-y" data-xid="js-check-x" name="tables[]"value="{$vo.name}" title="table:{$vo.name}"></td><td><b>{$vo.name}</b></td><td>{$vo.rows}</td><td>{$vo.data_length}</td><td>{$vo.create_time}</td><td><a class="btn btn-xs btn-primary js-ajax-dialog-btn" data-msg="确定备份吗?" href="{:url('AdminDatabackup/backup',array('table'=>$vo.name))}">备份</a><a class="btn btn-xs btn-primary js-ajax-dialog-btn" data-msg="确定优化吗?" href="{:url('AdminDatabackup/optimize',array('table'=>$vo.name))}">优化表</a><a class="btn btn-xs btn-warning js-ajax-dialog-btn" data-msg="确定修复吗?"href="{:url('AdminDatabackup/repair',array('table'=>$vo.name))}">修复表</a></td></tr></foreach><tfoot><tr><th width="15"><label><input type="checkbox" class="js-check-all" data-direction="x"data-checklist="js-check-x"></label></th><th>表名</th><th>备份进度</th><th width="150">数据量</th><th width="160">数据大小</th><th width="160">备份时间</th><th width="180">操作</th></tr></tfoot></table><ul class="pagination">{$page|default=''}</ul></form></div>
<script src="__STATIC__/js/admin.js"></script>
<script>function reloadPage(win) {win.location.reload();}$(function () {setCookie("refersh_time", 0);Wind.use('ajaxForm', 'artDialog', 'iframeTools', function () {//批量复制$('.js-articles-copy').click(function (e) {var ids = [];$("input[name='ids[]']").each(function () {if ($(this).is(':checked')) {ids.push($(this).val());}});if (ids.length == 0) {art.dialog.through({id: 'error',icon: 'error',content: '您没有勾选信息,无法进行操作!',cancelVal: '关闭',cancel: true});return false;}ids = ids.join(',');art.dialog.open("__ROOT__/index.php?g=portal&m=AdminArticle&a=copy&ids=" + ids, {title: "批量复制",width: "300px"});});//批量移动$('.js-articles-move').click(function (e) {var ids = [];$("input[name='ids[]']").each(function () {if ($(this).is(':checked')) {ids.push($(this).val());}});if (ids.length == 0) {art.dialog.through({id: 'error',icon: 'error',content: '您没有勾选信息,无法进行操作!',cancelVal: '关闭',cancel: true});return false;}ids = ids.join(',');art.dialog.open("__ROOT__/index.php?g=portal&m=AdminArticle&a=move&old_term_id={$term.term_id|default=0}&ids=" + ids, {title: "批量移动",width: "300px"});});$('#btn').click(function(){var tables = [];$("input[name='tables[]']").each(function () {if ($(this).is(':checked')) {tables.push($(this).val());}});if (tables.length == 0) {art.dialog.through({id: 'error',icon: 'error',content: '您没有勾选信息,无法进行操作!',cancelVal: '关闭',cancel: true});return false;}$.post("{:cmf_url('portal/AdminDatabackup/backupall')}",{'tables':tables},function(re){if (re.flag) {art.dialog.through({id: 'error',icon: 'error',content: re.flag,cancelVal: '关闭',cancel: true});return false;}else{art.dialog.through({id: 'face-smile',icon: 'face-smile',content: re.success,cancelVal: '关闭',cancel: true});return false; }},'json');//alert(tables);return false;});});});
</script>
</body>
</html>
前端importlist.html
<include file="public@header"/>
</head>
<body>
<div class="wrap js-check-wrap"><ul class="nav nav-tabs"><li class="active"><a href="javascript:;">备份文件</a></li></ul><form class="js-ajax-form" action="" method="post"><table class="table table-hover table-bordered table-list"><thead><tr><th>备份名称</th><th width="150">卷数</th><th width="160">压缩方式</th><th width="160">数据大小</th><th width="180">操作</th></tr></thead><foreach name="list" item="vo"><tr><td><b>{$vo.time|date="Ymd-His",###}</b></td><td>{$vo.part}</td><td>{$vo.compress}</td><td>{$vo.size}</td><td><a class="btn btn-xs btn-primary js-ajax-dialog-btn" data-msg="确定还原吗?" href="{:url('AdminDatabackup/import',array('time'=>$vo.time))}">还原</a><a class="btn btn-xs btn-warning js-ajax-delete" data-msg="确定删除吗?"href="{:url('AdminDatabackup/del',array('time'=>$vo.time))}">删除</a></td></tr></foreach><tfoot><tr><th>备份名称</th><th width="150">卷数</th><th width="160">压缩方式</th><th width="160">数据大小</th><th width="180">操作</th></tr></tfoot></table><ul class="pagination">{$page|default=''}</ul></form>
</div>
<script src="__STATIC__/js/admin.js"></script>
<script>function reloadPage(win) {win.location.reload();}$(function () {setCookie("refersh_time", 0);Wind.use('ajaxForm', 'artDialog', 'iframeTools', function () {//批量复制$('.js-articles-copy').click(function (e) {var ids = [];$("input[name='ids[]']").each(function () {if ($(this).is(':checked')) {ids.push($(this).val());}});if (ids.length == 0) {art.dialog.through({id: 'error',icon: 'error',content: '您没有勾选信息,无法进行操作!',cancelVal: '关闭',cancel: true});return false;}ids = ids.join(',');art.dialog.open("__ROOT__/index.php?g=portal&m=AdminArticle&a=copy&ids=" + ids, {title: "批量复制",width: "300px"});});//批量移动$('.js-articles-move').click(function (e) {var ids = [];$("input[name='ids[]']").each(function () {if ($(this).is(':checked')) {ids.push($(this).val());}});if (ids.length == 0) {art.dialog.through({id: 'error',icon: 'error',content: '您没有勾选信息,无法进行操作!',cancelVal: '关闭',cancel: true});return false;}ids = ids.join(',');art.dialog.open("__ROOT__/index.php?g=portal&m=AdminArticle&a=move&old_term_id={$term.term_id|default=0}&ids=" + ids, {title: "批量移动",width: "300px"});});});});
</script>
</body>
</html>
第六步:完成
thinkcmf5 数据备份、恢复相关推荐
- 实验10 SQL Server 数据备份/恢复
实验10 SQL Server 数据备份/恢复 一.实验目的 1.了解数据库备份的过程和属性设置: 2.掌握应用企业管理器备份和恢复数据库: 3.掌握应用T-SQL备份和恢复数据库: 4.掌握数据导入 ...
- MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证
视频地址:MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证 MongoDB数据库备份与恢复 一.备份 先介绍下命令语法: mongodump -h dbhost ...
- mysql数据备份恢复
数据备份恢复 一.概述 MySQL数据备份即databases Binlog my.cnf 所有备份数据都应放在非数据库本地,而且建议有多份副本.测试环境中做日常恢复演练,恢复较备份更为重要. 备份: ...
- 远程linux还原本地bak文件,Linux -- 服务器数据备份恢复策略
一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令, ...
- commvault备份mysql数据库_Commvault数据备份恢复平台-功能测试报告.pdf
Commvault 软件功能测试报告 Commvault 测试报告 Commvault 数据备份恢复平台 功能测试报告 第 1 页 Commvault 软件功能测试报告 目 录 第 1 章 测试概述 ...
- 华为云等级保护之数据备份恢复(完整版)
华为云等级保护之数据备份恢复(完整版) [摘要] 1. 等保合规要求等保2.0的技术要求中对数据的备份与恢复提出了明确的要求,从二级到四级的要求如下:2. 应对措施分析同时在安全管理制度中也列出了备份 ...
- 数据备份恢复软件专业数据保护Acronis True Image 2021 25.7.1
介绍: Acronis True Image,安克诺斯专业数据备份恢复软件,为你提供专业数据保护. Acronis安克诺斯是全球最佳数据备份恢复软件,能对电脑文件.磁盘.应用程序.操作系统等进行完整数 ...
- MySQL数据备份恢复全攻略,让我们通过简单几步找回丢失的数据
编写初衷 没有人生下来天生就是会计算机的,就拿笔者来说的话,也是从Windows->Centos->Ubuntu一步一步慢慢学习,积累下来的.为了让大家能够更快更高效率的学习,从今天开始, ...
- 阿里云rds数据备份恢复
由于阿里云rds数据库备份的是物理备份,这个备份恢复,阿里云官方恢复是需要重新购买数据库才能恢复.下边介绍下如何恢复数据. 1.阿里云数据库备份实例,恢复数据的时候需要将数据恢复到本地数据库,是不能直 ...
- oracle查看expdp进度,备份之监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN)
监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN) 一.查看EXPDP/IMPDP的进度 1 两个视图 当你当如导出的时候,如果数据量比较大,中途有些人会着急,不免想看看进度如何,利用两个视 ...
最新文章
- php this 代表什么,php中$this-是什么意义
- C# 中科学计数法转成正常值
- Oracle 原理:复杂的SQL语句
- c语言前后指针怎么用,详解一下——C语言指针该怎么用
- 控制cpu_I/O控制器及控制方式,了解一下
- 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理
- [JNI]开发之旅(4)项目架构介绍
- The Feynman Technique The Best Way to Learn Anything理查德•弗曼学习法
- 步进电机、舵机、直流电机电机的原理
- 10款电子邮箱测评:新浪邮箱、TOM邮箱、qq邮箱、163邮箱等产品差异明显,这款邮箱安全稳定性最高!
- Ass代理转实模/Convert ass proxy to model
- python 工资减税_Python告诉你个税抵扣能省多少钱?
- matlab(1):画图像修改曲线形状
- 数据分析 - 跨境电商爬虫成长记 之 第三篇:完整的爬虫工作环节有哪些
- 有史以来最全面最经典的网络技术资料合集
- 热风枪的温度设置(与焊锡有无含铅有关)和使用注意
- CATIA Composer三维作业指导书
- python程序运行结果始终为0_下列Python程序的运行结果是
x=0
y=True
print(xy and \'A\'\'B\')...
- 推荐算法论文:Deep Neural Networks for YouTube Recommendations
- Java 回升!月薪 25K 的无名公司是谁?75 万招聘数据揭晓谁最大方!