第一步: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 数据备份、恢复相关推荐

  1. 实验10 SQL Server 数据备份/恢复

    实验10 SQL Server 数据备份/恢复 一.实验目的 1.了解数据库备份的过程和属性设置: 2.掌握应用企业管理器备份和恢复数据库: 3.掌握应用T-SQL备份和恢复数据库: 4.掌握数据导入 ...

  2. MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证

    视频地址:MongoDB 教程六: MongoDB管理:数据导入导出,数据备份恢复及用户安全与认证 MongoDB数据库备份与恢复 一.备份 先介绍下命令语法: mongodump -h dbhost ...

  3. mysql数据备份恢复

    数据备份恢复 一.概述 MySQL数据备份即databases Binlog my.cnf 所有备份数据都应放在非数据库本地,而且建议有多份副本.测试环境中做日常恢复演练,恢复较备份更为重要. 备份: ...

  4. 远程linux还原本地bak文件,Linux -- 服务器数据备份恢复策略

    一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令, ...

  5. commvault备份mysql数据库_Commvault数据备份恢复平台-功能测试报告.pdf

    Commvault 软件功能测试报告 Commvault 测试报告 Commvault 数据备份恢复平台 功能测试报告 第 1 页 Commvault 软件功能测试报告 目 录 第 1 章 测试概述 ...

  6. 华为云等级保护之数据备份恢复(完整版)

    华为云等级保护之数据备份恢复(完整版) [摘要] 1. 等保合规要求等保2.0的技术要求中对数据的备份与恢复提出了明确的要求,从二级到四级的要求如下:2. 应对措施分析同时在安全管理制度中也列出了备份 ...

  7. 数据备份恢复软件专业数据保护Acronis True Image 2021 25.7.1

    介绍: Acronis True Image,安克诺斯专业数据备份恢复软件,为你提供专业数据保护. Acronis安克诺斯是全球最佳数据备份恢复软件,能对电脑文件.磁盘.应用程序.操作系统等进行完整数 ...

  8. MySQL数据备份恢复全攻略,让我们通过简单几步找回丢失的数据

    编写初衷 没有人生下来天生就是会计算机的,就拿笔者来说的话,也是从Windows->Centos->Ubuntu一步一步慢慢学习,积累下来的.为了让大家能够更快更高效率的学习,从今天开始, ...

  9. 阿里云rds数据备份恢复

    由于阿里云rds数据库备份的是物理备份,这个备份恢复,阿里云官方恢复是需要重新购买数据库才能恢复.下边介绍下如何恢复数据. 1.阿里云数据库备份实例,恢复数据的时候需要将数据恢复到本地数据库,是不能直 ...

  10. oracle查看expdp进度,备份之监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN)

    监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN) 一.查看EXPDP/IMPDP的进度 1 两个视图 当你当如导出的时候,如果数据量比较大,中途有些人会着急,不免想看看进度如何,利用两个视 ...

最新文章

  1. php this 代表什么,php中$this-是什么意义
  2. C# 中科学计数法转成正常值
  3. Oracle 原理:复杂的SQL语句
  4. c语言前后指针怎么用,详解一下——C语言指针该怎么用
  5. 控制cpu_I/O控制器及控制方式,了解一下
  6. 去除linux 文件中的控制字符,Shell乱码文件中的控制字符处理
  7. [JNI]开发之旅(4)项目架构介绍
  8. The Feynman Technique The Best Way to Learn Anything理查德•弗曼学习法
  9. 步进电机、舵机、直流电机电机的原理
  10. 10款电子邮箱测评:新浪邮箱、TOM邮箱、qq邮箱、163邮箱等产品差异明显,这款邮箱安全稳定性最高!
  11. Ass代理转实模/Convert ass proxy to model
  12. python 工资减税_Python告诉你个税抵扣能省多少钱?
  13. matlab(1):画图像修改曲线形状
  14. 数据分析 - 跨境电商爬虫成长记 之 第三篇:完整的爬虫工作环节有哪些
  15. 有史以来最全面最经典的网络技术资料合集
  16. 热风枪的温度设置(与焊锡有无含铅有关)和使用注意
  17. CATIA Composer三维作业指导书
  18. python程序运行结果始终为0_下列Python程序的运行结果是 x=0 y=True print(xy and \'A\'\'B\')...
  19. 推荐算法论文:Deep Neural Networks for YouTube Recommendations
  20. Java 回升!月薪 25K 的无名公司是谁?75 万招聘数据揭晓谁最大方!

热门文章

  1. SpringMVC04:数据处理及跳转
  2. 2000-2009十年十大创业新模式
  3. JS正则表达式小笔记
  4. 【复杂网络社团结构研究】拉普拉斯矩阵定义及性质详细推导
  5. Type接口的基础知识
  6. nao机器人导入自己写的python程序_python程序控制NAO机器人行走
  7. 一岁半小朋友的火星电话和滑滑梯
  8. 问题 B: 第N个智慧数
  9. isee图片专家批量处理图片大小教程
  10. 4、RDA8910(4GCAT1)CSDK二次开发:期待已久的ADC采集