考虑使用mysql 5.1的事件调度器,可以定时触发事件 。 自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。 事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。 在使用这个功能之前必须确保event_scheduler已开启,可执行 SET GLOBAL event_scheduler = 1; ---或我们可以在配置my.ini文件 中加上 event_scheduler = 1或 SET GLOBAL event_scheduler = ON;来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如: mysqld ... --event_scheduler=1要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE 'event_scheduler';或 SELECT @@event_scheduler;或 SHOW PROCESSLIST;
例如:Process process = null;
process = Runtime.getRuntime().exec("sql语句");
自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。
事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。
在使用这个功能之前必须确保event_scheduler已开启,可执行
SET GLOBAL event_scheduler = 1; ---或我们可以在配置my.ini文件 中加上 event_scheduler = 1或
SET GLOBAL event_scheduler = ON;来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:
mysqld ... --event_scheduler=1要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE 'event_scheduler';或
SELECT @@event_scheduler;或
SHOW PROCESSLIST;
定时,你可以使用 windows的计划任务或者linux/unix的crontabhttp://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#disaster-prevention
你可以参考一下官方手册中的例子和说明。
5.9. 备份与恢复
5.9.1. 数据库备份
5.9.2. 示例用备份与恢复策略
5.9.3. 自动恢复
5.9.4. 表维护和崩溃恢复
5.9.5. myisamchk:MyISAM表维护实用工具
5.9.6. 建立表维护计划
5.9.7. 获取关于表的信息
//properName 是什么 哪里来的
InputStream inputStream = mysql_util.class.getClassLoader
().getResourceAsStream(properName); //mysql_util哪里来的 Properties p = new Properties();
try {
p.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return p;
} public String backupMysql() {
Properties pros = getPprVue("prop.properties");
// 这里是读取的属性文件,也可以直接使用
String username = pros.getProperty("username");
String password = pros.getProperty("password");
// 得到MYSQL的用户名密码后调用 mysql 的 cmd:
String mysqlpaths = pros.getProperty("mysqlpath");
String databaseName = pros.getProperty("databaseName");
String address = pros.getProperty("address");
String sqlpath = pros.getProperty("sql");
File backupath = new File(sqlpath);
if (!backupath.exists()) {
backupath.mkdir();
}
StringBuffer sb = new StringBuffer();
sb.append(mysqlpaths);
sb.append("mysqldump ");
sb.append("--opt ");
sb.append("-h ");
sb.append(address);
sb.append(" ");
sb.append("--user=");
sb.append(username);
sb.append(" ");
sb.append("--password=");
sb.append(password);
sb.append(" ");
sb.append("--lock-all-tables=true ");
sb.append("--result-file=");
sb.append(sqlpath);
sb.append(sql);
sb.append(" ");
sb.append("--default-character-set=utf8 ");
sb.append(databaseName);
Runtime cmd = Runtime.getRuntime();
try {
Process p = cmd.exec(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}大虾给我解释下大部分的代码都是干什么用的 谢谢
定义一个方法:
public void backupDB() {
str="mysqldump -u root -p123456 --opt ab>e:/ab.sql";
try{
Runtime rt=Runtime.getRuntime();
rt.exec("cmd /c"+str);
System.out.println("备份成功!");
}catch(IOException e){
e.printStackTrace();
System.out.println("备份失败!");
} }