《java智能实现数据库备份》由会员分享,可在线阅读,更多相关《java智能实现数据库备份(7页珍藏版)》请在金锄头文库上搜索。
1、-原理:MySQL 数据库备份原理: Navicat 等数据库界面软件通用的数据库备份原理就是直接调用 MYSQL 本身的系统命令。MySQL 本身的系统命令:-opt h localhost -user=root -password=admin -lock-all-tables=true -result-file=E:/oes/2221.sql -default-character-set=utf8 oes解析:主机h,用户名-user ,密码password ,锁定所有表-lock-all-tables=true,目标文件-result-file,编码-default-character-
2、set=utf8,数据源 oesJava 中执行系统命令方法:Runtime cmd = Runtime.getRuntime();Process p = cmd.exec(“”); /执行 CMD 指令(String)由于无法确定主机是否配置了 MySQL 环境变量,所以需要最保险的确定 MySQL 中mysqldump 的位置,它存在于 MySQL 安装文件夹得 Bin 目录下,问题就是如何获取 MySQL 的安装目录?-针对于获取 MySQL 的安装目录,我用的是比较笨的方法:解析注册表。找到注册表中 MySQL 的软件信息,里面包含有软件的安装地址,卸载地址,版本号等等基本信息,直接取
3、用它的安装信息就行。软件信息在注册表中的位置:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall软件关联注册表中软件信息: -类 CheckSoftware,解析 MySQL 软件安装地址import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class CheckSoftware /* 遍历注册表,查询MySQL 的注册表关联*/public static String che
4、ck() throws Exception Runtime runtime = Runtime.getRuntime();Process process = null;process = runtime.exec(cmd /c reg query HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall);BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream();String string = null;wh
5、ile (string = in.readLine() != null) process = runtime.exec(cmd /c reg query + string+ /v DisplayName);BufferedReader name = new BufferedReader(new InputStreamReader(process.getInputStream();String message = queryValue(string, DisplayName);if (message != null & message.contains(MySQL) String message
6、2 = queryValue(string, InstallLocation);return message2;in.close();process.destroy();return null;/* * 查询出需要的MySQL 服务的安装路径*/private static String queryValue(String string, String method)throws IOException String pathString = ;Runtime runtime = Runtime.getRuntime();Process process = null;BufferedReade
7、r br = null;process = runtime.exec(cmd /c reg query + string + /v + method);br = new BufferedReader(new InputStreamReader(process.getInputStream();br.readLine();br.readLine();/ 去掉前两行无用信息if (pathString = br.readLine() != null) pathString = pathString.replaceAll(method + REG_SZ , ); / 去掉无用信息return pat
8、hString;return pathString;-类 JavaMysql 备份还原数据库import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class JavaMysql /* 备份数据库 1、读取配置文件 2、启动智能查询Mysql安装目录 3、备份数据库为sql文件*/public static void backup(String sql) Properties pros = getPprVue(prop.propert
9、ies);String username = pros.getProperty(username);String password = pros.getProperty(password);CheckSoftware c = null;try System.out.println(MySQL服务安装地址 : +c.check().toString(); catch (Exception e2) e2.printStackTrace();String mysqlpaths;try mysqlpaths = c.check().toString() + bin + ;String database
10、Name = 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.ap
11、pend(-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.app
12、end(databaseName);System.out.println(cmd指令 :+sb.toString();Runtime cmd = Runtime.getRuntime();try Process p = cmd.exec(sb.toString(); catch (IOException e) e.printStackTrace(); catch (Exception e1) e1.printStackTrace();/* 读取属性文件*/public static Properties getPprVue(String properName) InputStream inpu
13、tStream = JavaMysql.class.getClassLoader().getResourceAsStream(properName);Properties p = new Properties();try p.load(inputStream);inputStream.close(); catch (IOException e) e.printStackTrace();return p;/* 根据备份文件恢复数据库*/public static void load(String filename) Properties pros = getPprVue(prop.propert
14、ies);String root = pros.getProperty(jdbc.username);String pass = pros.getProperty(jdbc.password);String mysqlpaths = c.check().toString() + bin + ;String sqlpath = pros.getProperty(sql);String filepath = mysqlpaths + sqlpath + filename; / 备份的路径地址String stmt1 = mysqlpaths + mysqladmin -u + root + -p + pass+ create finacing; / -p后面加的是你的密码String stmt2 = mysqlpaths + mysql -u + root + -p + pass+ finacing 属性文件: prop.properties,动态配置用户名及密码等基本属性username = root password = adminsql = E:/oes/address=localhostdatabaseName=oes-JVM 内存性能分析