java 实现对数据表的备份与还原(备份与还原 到服务器中)

您所在的位置:网站首页 数据库如何还原表的数据和数据 java 实现对数据表的备份与还原(备份与还原 到服务器中)

java 实现对数据表的备份与还原(备份与还原 到服务器中)

2024-07-11 00:29| 来源: 网络整理| 查看: 265

java备份还原表数据 背景

需求:这个功能还是费了我一段时间才完成,大体的需求是这样的。 首先是 分模块,每个模块有不同的几个表,备份的时候就按照模块来备份数据,相当于一次性备份多张表的数据了,模块 和 模块拥有的表都是能配置的(即增删改查),主要是选择模块来备份这个麻烦点

思路 备份 备份的话我想到的是可以用导出xml文件的形式,第二种的话只用用mysql原生的mysqldump命令就好。 最后用的mysqldump命令,这个容易实现一些。还原 还原我查了下有 source 命令还原的,还有使用 mysqldump -h 主机IP -uroot -p db < /root/db.sql 命令进行还原的 我使用的是后面一种。 命令使用方法 mysqldump命令 1.备份数据库 备份所有数据库 mysqldump -h 主机IP -uroot -p --all-database > /usr/dball.sql 备份多个数据库 mysqldump -h 主机IP -uroot -p db1 db2 db3 >/usr/db123.sql 备份单个数据库 mysqldump -h 主机IP -uroot -p db >/usr/db.sql 2.备份数据库表 备份多张表 mysqldump -h 主机IP -uroot -p db table1 table2 >/data/db_table12.sql 备份单张表 mysqldump -h 主机IP -uroot -p db table >/data/db_table.sql 备份表时用 where 筛选 mysqldump -h 主机IP -uroot -p db table --where " 查询条件" >/data/db_table.sql 还原 mysqldump命令还原 mysqldump -h 主机IP -uroot -p db

在这里插入图片描述 比如选择aaa模块进行备份,备份后就会生成一个sql文件在你所指定的路径中,我下面实在window测试的,linux也测试过了。 在这里插入图片描述 在这里插入图片描述 js代码

//备份按钮 handleBackupModule(){ this.$modal.confirm('是否确认备份该模块的表数据?') .then(()=>{ backupModule(this.sysDataBackupList).then(response=>{ if(response.code == 200){ this.$message({ message: "备份成功", type: "success" }); this.getFileTable(); }else{ this.$message({ message: "备份失败", type: "error" }); this.getFileTable(); } }); }).catch(()=>{ this.$message({ message: "取消备份", type: "info" }); this.getFileTable(); }); }, 还原 及 下载到本地

还原的话就在 查出来的 sql文件 表格后面加一个还原按钮就好,这两个就不详细描述了。

下载到本地的话用的若依自带的download方法。

//还原 handleRetoreFile(row){ this.$modal.confirm('是否确认还原该sql文件?') .then(()=>{ restoreFile(row.fileName).then(res=>{ if(res.code == 200){ this.$message({ message: "还原成功", type: "success" }); this.getFileTable(); }else{ this.$message({ message: "还原失败", type: "error" }); this.getFileTable(); } }); }).catch(()=>{ this.$message({ message: "取消还原", type: "info" }); }) }, //下载 handleDownloadFile(row){ const fileName = row.fileName this.download( "/dataBackup/downloadFile?fileName=" + fileName, { ...fileName, }, fileName ); },

下载业务层

@Override public boolean downloadFile(String fileName, HttpServletRequest request, HttpServletResponse response) { String filePath = path + "/" +fileName; File file = new File(filePath); response.setCharacterEncoding("UTF-8"); String realFilename = file.getName(); response.setHeader("content-type", "application/octet-stream;charset=UTF-8"); response.setContentType("application/octet-stream;charset=UTF-8"); if (file.exists()){ try { response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFilename.trim(), "UTF-8")); BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); byte[] bytes = new byte[1024]; int len; while ((len = inputStream.read(bytes,0,bytes.length)) != -1){ outputStream.write(bytes,0,len); } outputStream.close(); inputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return true; } 上传

上传的话用的elmentui 上的上传组件,贴一下前后端

html

将文件拖到此处,或点击上传 仅允许导入sql文件。 确 定 取 消

data

FileTable: { // 遮罩层 loading: true, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 数据备份表模块表格数据 FileList: [], // 弹出层标题 title: "", // 是否显示弹出层 open: false, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, fileName: "" }, // 表单参数 form: {}, // 表单校验 rules: { }, upload: { // 是否显示弹出层(用户导入) open: false, // 弹出层标题(用户导入) title: "", // 是否禁用上传 isUploading: false, // 是否更新已经存在的用户数据 // updateSupport: 0, // 设置上传的请求头部 headers: { Authorization: "Bearer " + getToken() }, // 上传的地址 url: "https://192.168.16.22/dataBackup/importFile", },

js

//导入 importFile(){ this.FileTable.upload.open = true; }, // 文件上传中处理 handleFileUploadProgress(event, file, fileList) { this.FileTable.upload.isUploading = true; }, // 文件上传成功处理 handleFileSuccess(response, file, fileList) { this.FileTable.upload.open = false; this.FileTable.upload.isUploading = false; this.$refs.upload.clearFiles(); this.$alert( "" + response.msg + "", "导入结果", { dangerouslyUseHTMLString: true } ); this.getFileTable(); }, // 提交上传文件 submitFile() { this.$refs.upload.submit(); },

上传的业务层

@Override public boolean importFile(MultipartFile file) { try { InputStream inputStream = file.getInputStream(); String name = file.getOriginalFilename(); String newPath = path + "/" + name; File uploadFile = new File(newPath); byte[] buffer = new byte[2048]; int len = 0; FileOutputStream outputStream = new FileOutputStream(uploadFile); while ((len = inputStream.read(buffer)) != -1){ outputStream.write(buffer,0,len); } outputStream.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return true; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3