MySQL基于java实现备份表的方法

  

MySQL基于java实现备份表的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

配置文件如下:

java代码收藏代码
#数据库地址
dbAddress=localhost
#要备份的数据库名称
数据库名=nms
#数据库用户名
用户名=根
#数据库密码
密码=根
#, mysqldump路径Linux
mysqlpath=/usr/bin/
#备份文件存放位置Linux
sqlFilePath=/MySQlBack/
#, mysqldump路径Windows
# mysqlpath=C \://程序文件//MySQL//MySQL服务器5.5//bin//
#备份文件存放位置Windows
# sqlFilePath=C \://MySQL//

执行功能的代码类如下:

java代码收藏代码
包com.nms.common.db;
进口java.io.File;
进口java.io.IOException;
进口java.io.InputStream;
进口java.util.Map;
进口java.util.Properties;
进口java.util.concurrent.ConcurrentHashMap;
进口org.apache.commons.logging.Log;
进口org.apache.commons.logging.LogFactory;
/* *
*用于数据库备份操作
*/
公共类DbBackUpMethod {
私有静态日志记录器=LogFactory.getLog (DbBackUpMethod.class);
私有静态属性优点=getPprVue (“db.properties");
公共静态Map<字符串,String>backUpTableList=new ConcurrentHashMap<字符串,String> ();
私有静态DbBackUpMethod backObj=new DbBackUpMethod ();
公共静态DbBackUpMethod getDbBackUpMethod () {
返回backObj;
}
公共空间备份(字符串表){
如果(零!=backUpTableList.get(表))返回;
backUpTableList。(表名,表名);//标记已经用于备份
新线程(新DbBackUpThread(表)).start ();
}
/* *
*用于执行某表的备份
*/
类DbBackUpThread实现Runnable {
字符串表名=零;
公共DbBackUpThread(字符串表){
。表名=表;
}
@Override
公共空运行(){
尝试{
字符串的用户名=pros.getProperty (“username");
字符串密码=pros.getProperty (“password");
字符串mysqlpaths=pros.getProperty (“mysqlpath");
字符串地址=pros.getProperty (“dbAddress");数据库名=pros.getProperty
字符串(“databaseName");
字符串sqlpath=pros.getProperty (“sqlFilePath");
文件backupath=新文件(sqlpath);如果(
! backupath.exists ()) {
backupath.mkdir ();
}
=new StringBuffer StringBuffer某人();
sb.append (mysqlpaths);
sb.append (“mysqldump“);
sb.append(“——选择“);
sb.append (“- h“);
sb.append(地址);
sb.append (“;“);
sb.append(“——用户=?;
sb.append(用户名);
sb.append (“;“);
sb.append(“——密码=?;
sb.append(密码);
sb.append (“;“);
sb.append (“——lock-all-tables=true”);
sb.append(“——结果文件=?;
sb.append (sqlpath);
sb.append(表名+“.sql");
sb.append (“;“);
sb.append (“——default-character-set=utf8“);
sb.append(数据库名);
sb.append (“;“);
sb.append(表);
运行cmd=Runtime.getRuntime ();
过程p=cmd.exec (sb.toString ());
p.waitFor ();//该语句用于标记,如果备份没有完成,则该线程持续等待
}捕捉(异常e) {
logger.error(“备份操作出现问题“,e);最后
} {
backUpTableList.remove(表);//最终都将解除
}
}
}
公共静态属性getPprVue(字符串properName) {
InputStream InputStream=DbBackUpMethod.class.getClassLoader () .getResourceAsStream (properName);
p=新属性();
尝试{
p.load (inputStream);
inputStream.close ();
}捕捉(IOException e) {
logger.error(“无法读取用于备份数据的配置文件“,e);
}
返回p;
}
}

在行动中,可以直接调用备份操作方法:

Java代码收藏代码
DbBackUpMethod.getDbBackUpMethod () .backup(表);//调用备份

同时,如果页面有删除该表的操作,在操作前应该判断该表是否在进行备份

Java代码收藏代码
如果(零!=DbBackUpMethod.backUpTableList.get(表))

然后页面JSP调用时,可以给予响应的提示,我的判断是只能删除一张表:

函数deleteTableByTableName () {
  var pk=table.getSelectedKeys ();
  如果(““==pk) {
  alert(“请选择一条记录!“);
  返回错误;
  }
  如果(pk。长度比;1){
  alert(“请选择一条记录!“);
  返回错误;
  }
  var=table.get行(pk);
  var表名=rows.tableName;
  如果确认(“你确认要删除该表吗?“)){
  如果确认(“删除该表前,你需要备份操作吗? \ n \ n选择备份后,系统将后台进行相关操作! \ n在此期间,您不能删除该表! \ n备份操作可能将持续数小时时间!请知晓!“)){
  document.form1.action=癰ackUpTable.action& # 63;表名=?+表;
  document.form1.submit ();
  其他}{
  如果确认(“你确认提交吗?该表将删除!“)){
  document.form1.action=癲el.action& # 63;表名=?+表;
  document.form1.submit ();
  }
  }
  }
  }

MySQL基于java实现备份表的方法