Java Web 實現Mysql 數據庫備份與還原

前段時間某某刪庫事故付出的慘重代價告訴咱們: 數據備份的必要性是企業數據管理極其重要的一項工做。java

1. Mysql備份與還原命令

備份命令:mysql

mysqldump -h127.0.0.1 -uroot -ppwd test > d:/test.sql  #備份數據庫test到 D 盤

還原命令:git

mysql -h127.0.0.1 -uroot -ppwd test< test.sql  ---將D備份的數據庫腳本,恢復到數據庫test中

原理就是:經過cmd命令行,調用 mysql安裝路徑下面的bin目錄下面的 msqldump.exe和mysql.exe來完成相應的工做.sql

2. Web項目中的使用

備份代碼:數據庫

@OperLog("備份新增")
@PreAuthorize("@ps.hasPerm('backup_add')")
@PostMapping("/save")
@ResponseBody
@Transactional
public R save(@RequestBody Backup backup) {
     String name = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
     backup.setName(name);
     String filePath = profile + "backup/";
     File uploadDir = new File(filePath);
     if (!uploadDir.exists())
          uploadDir.mkdirs();
     String cmd = "cmd /c mysqldump -u" + username + " -p" + password + " " + CommonConstants.DB_NAME + " > "
                + filePath + CommonConstants.DB_NAME + "_" + name + ".sql";
     backup.setPath(filePath + CommonConstants.DB_NAME + "_" + name + ".sql");
     //執行備份命令
     try {
          StaticLog.info("執行備份命令:" + cmd);
          RuntimeUtil.exec(cmd);
     } catch (Exception ex) {
          return R.error(ex.getMessage());
     }
     backupService.save(backup);
     return R.ok();
}

還原代碼:app

@OperLog("備份還原")
    @PreAuthorize("@ps.hasPerm('backup_restore')")
    @GetMapping("/restore/{id}")
    @ResponseBody
    public R restore(@PathVariable("id") Integer id) {
        Backup backup = backupService.getById(id);
        if (backup != null) {
            String cmd = "cmd /c mysql -u" + username + " -p" + password + " " + CommonConstants.DB_NAME + " < " + backup.getPath();
            //執行還原命令
            try {
                StaticLog.info("執行還原命令:" + cmd);
                RuntimeUtil.exec(cmd);
            } catch (Exception ex) {
                return R.error(ex.getMessage());
            }
       }
       return R.ok();
}

3. 環境變量Path中添加mysql安裝路徑

如:計算機-》屬性-》高級系統設置-》環境變量-》系統變量Path-》增長 ;C:\Program Files\MySQL\MySQL Server 5.7\bin;命令行

既然數據庫備份文件都到本地了,固然能夠將sql腳本文件經過電子郵件發到你的郵箱,若是再加個定時備份就更完美了rest

注:環境變量必定要配置不然沒法備份成功,以上代碼適用於Windows環境
代碼地址:[代碼下載]
相關文章
相關標籤/搜索