java实现定时备份mysql数据库-----已通过测试

配置文件中的信息

sqlurl=C://Program Files (x86)//MySQL//MySQL Server 5.0//bin//mysqldump -h localhost -uroot -pwjg user
      path=F:/test.sql
      backuptime=16:34:00

备份数据库

public class TestMysql {
                   //读取配置文件中的信息
                   //MySql的安装bin目录路径和dump等参数
            static String sqlurl=GetProperty.getPropertyByName("property","sqlurl");
             //保存备份文件的路径及名称
              static String path=GetProperty.getPropertyByName("property","path");

public TestMysql(){
             backup(); // 备份数据库
             System.out.println("备份数据库成功!");
            }

public static void backup(){
               try {
                 Runtime rt =Runtime.getRuntime(); //返回与当前的Java应用程序的运行时对象
                // 调用 调用mysql的安装目录的命令
                Process child = rt.exec(sqlurl);
             // 设置导出编码为utf-8。这里必须是utf-8
             // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
                InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
                InputStreamReader xx = new InputStreamReader(in, "utf-8");
          // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
                String inStr;
                StringBuffer sb = new StringBuffer("");
                String outStr;
         // 组合控制台输出信息字符串
                BufferedReader br = new BufferedReader(xx);
                while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
    }
                outStr = sb.toString();
         // 要用来做导入用的sql目标文件:
                FileOutputStream fout = new FileOutputStream(path);
                OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
                writer.write(outStr);
                writer.flush();
                in.close();
                xx.close();
                br.close();
                writer.close();
                fout.close();
                System.out.println("");
          } catch (Exception e) {
              e.printStackTrace();
         }
      }
}

调用要执行的内容

public class NFDFlightDataTimerTask extends TimerTask {

private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
     @Override
      public void run() {
     try {
     //在这里写你要执行的内容
  new TestMysql();

  } catch (Exception e) {
  log.info("-------------解析信息发生异常--------------");
     }
   }

}

在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后
发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况
发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。

public class TimerManager {
    //时间间隔 一天时间
          private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

public TimerManager() {

//获取并处理配置文件中的时间
        String backuptime=GetProperty.getPropertyByName("property","backuptime");
        String[] time=backuptime.split(":");
        int hours=Integer.parseInt(time[0]);
        int minute=Integer.parseInt(time[1]);
      int second=Integer.parseInt(time[2]);

Calendar calendar = Calendar.getInstance();

/*** 定制每日2:00执行方法 ***/
        calendar.set(Calendar.HOUR_OF_DAY,hours);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);

Date date=calendar.getTime(); //第一次执行定时任务的时间

//如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
       if (date.before(new Date())) {
        date = this.addDay(date, 1);
       }

Timer timer = new Timer();

NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
     //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
       timer.schedule(task,date,PERIOD_DAY);
  }

// 增加或减少天数
      public Date addDay(Date date, int num) {
      Calendar startDT = Calendar.getInstance();
      startDT.setTime(date);
      startDT.add(Calendar.DAY_OF_MONTH, num);
      return startDT.getTime();
    }
}

创建一个监听器

public class NFDFlightDataTaskListener implements ServletContextListener {

public void contextInitialized(ServletContextEvent event) {
                      new TimerManager();
          }

public void contextDestroyed(ServletContextEvent event) {
         }

}

然后要在web.xml里面配置监听器

<listener>
      <listener-class>
          com.zhongren.Test.NFDFlightDataTaskListener
      </listener-class>
</listener>

时间: 2024-08-03 23:29:24

java实现定时备份mysql数据库-----已通过测试的相关文章

java代码定时备份mysql数据库及注意事项——基于 springboot

一.需求: 定时备份数据库数据 二.分析: 1. 定时任务 2. 备份数据库表结构和数据 三.实现: 1. pom 文件: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

Linux下定时备份MySQL数据库的Shell脚本

Linux下定时备份MySQL数据库的Shell脚本 对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间和精力,还灰常不专业的说.于是,有了下面这段脚本的出现.参考了网上的很多教程,外加自己的测试,以下脚本经测试可用.#!/bin/bash#Shell Command For Backup MySQL Database Everyday Automatically By Crontab#Author :

centos7-每天定时备份 mysql数据库

centos7-每天定时备份 mysql数据库 第一步:编写数据库备份脚本database_mysql_shell.sh #!/bin/bash DATE=`date +%Y%m%d%H%M` #every minute DATABASE=springboot-admin #database name DB_USERNAME=root #database username DB_PASSWORD="mysql" #database password BACKUP_PATH=/backu

定时备份mysql数据库的shell脚本

最近项目需要定时备份mysql数据库的数据,根据需求写了一份定时备份mysql数据库的脚本. -h mysql的地址  默认为localhost -P 端口号  默认为3306 -u 用户  默认为root -p 密码 默认为123456 -f  备份存放地址  默认为 /bak 下面 -n 指定数据库  默认为所有数据库(除开mysql系统自带数据库) #!/bin/bash now=`date "+%Y-%m-%d_%H:%M:%S" ` echo "==========

商城系统在linux系统中定时备份MySQL数据库并删除七天前的备份文件

数据库是商城软件中重要的组成部分,定时任务能周期性地自动执行中的程序必要的业务逻辑,以DSMall开源商城系统每日店铺结算的业务逻辑为例:!/bin/bash?Name:bakmysql.sh?This?is?a?ShellScript?For?Auto?DB?Backup?and?Delete?old?Backup备份地址backupdir=/home/mysqlbackup备份文件后缀时间time=`?date?+%Y%m%d%H%M%S?<br/>需要备份的数据库名称<br/>

使用Navicat定时备份mysql数据库和创建报表并邮件自动发送

数据库备份在现代计算机高速发展的今日变得日益重要,程序员往往因为不重视而忽略备份数据,导致数据丢失,造成非常严重的后果.定时备份无疑是解决备份的最好的途径,本文主要使用Navicat来自动备份数据库和创建相关的计划任务. (一)使用Navicat自动备份数据库: 1,打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业"具体如下图. 2,双击上面的可用任务,它就会到下面的列表里去,也代表你选择了这个任务 3,点

linux设置定时备份mysql数据库

最近写自己的项目,买了阿里云服务器,可以在云上根据自己想到的需求随意使用技术,感觉很爽.备份mysql流程如下: 环境:CentOS Linux release 7.2.1511 (Core) mysql5.6.34 创建存放备份文件的文件夹mkmir /backup/mysql 创建备份脚本vi backup.shmysqldump -u root -p888 familytree | gzip > /backup/mysql/familytree_$(date +%Y%m%d_%H%M%S)

linux 定时备份mysql数据库

首先要先搞清楚两个概念: ①.mysqldump,mysqldump是mysql的逻辑备份工具,它不是linux的命令,工作原理类似产生一些列sql语句,对数据库进行指定的逻辑备份. 最简洁的形式是:mysqldump  -uuserName -ppassWord --databasesName 当然,可以通过配置参数实现更多功能(请原理我厚颜无耻复制来的配置列表,见附录1).,多唠叨一句,进行数据库操作时请注意是否有相应的数据库权限. ②crontab 这是个linux系统命令,是用来定期执行

linux上定时备份mysql数据库

定时备份数据库 /usr/sbin/backupmysql timestamp=`date +"%Y-%m-%d-%H-%M-%S"` mysqldump -uroot -p'123456 databasename>/db$timestamp.sql chmod +x backupmysql 安装crontab: [[email protected] ~]# yum install vixie-cron [[email protected] ~]# yum install cro