闲言少絮,这个程序利用MySql数据库自带小程序进行数据库的备份和还原。这两个程序分别是:mysql.exe和mysqldump.exe。这两个程序在您安装Mysql数据库的时候会自动安装到数据库的bin目录。这两个程序存在的目录为:C:\Program File\MySQL\MySQL Server 5.5\bin这个目录下。在这个目录下您还可以看到很多MySql自带的工具程序,他们都很方便和实用。

数据库安装程序信息:mysql- 5.5.25a-win32.msi。

安装路径:程序默认路径。

应用程序:Navicat_for_Mysql.exe,默认安装。

依赖项:mysql-connector-java-5.1.10-bin.jar

服务器地址:192.168.0.100

核心语句:

备份:"cmd.exe /C C:\\mysqldump -uroot -p123456 -h

192.168.0.100 "+ database +" >"+ path +"";

还原:"cmd.exe /C

C:\\mysql -uroot -p123456 -h 192.168.0.100 "+ database +"

其他说明:建立的数据库名称为:qqwe,数据库建立在远程服务器上。mysql.exe和mysqldump.exe从bin目录下取出来,放入到

C:\\下。

这个程序通过读取*.properties配置文件来获取外界传递进来的信息。这个文件是自己定义的。其中定义的内容如下:

OK,简要说明结束,看代码!

package DatabaseRR;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.lang.Process;

import java.util.ArrayList;

import java.util.List;

import java.util.Properties;

import java.sql.Statement;

public class EasyRecovery

{

Connection conn = null;

public Connection getConnection(String fileNameAndURL)

{

Properties prop = new Properties();

FileInputStream fis;

try{

fis = new FileInputStream(fileNameAndURL);

prop.load(fis);

fis.close();

String userName = prop.getProperty("userName");

String password = prop.getProperty("password");

String localHost = prop.getProperty("localHost");//主机名或主机地址IP,如 192.168.0.100

String database = prop.getProperty("database");//数据库名称

String jdbcDriver = prop.getProperty("jdbcDriver");//加载数据库驱动的名称

String port = prop.getProperty("port");//端口

String dataBaseCompany = prop.getProperty("dataBaseCompany");

String pathUrl = "jdbc:"+dataBaseCompany+"://"+localHost+":"+port+"/"+database;

Class.forName(jdbcDriver); // 加载MySQL数据库驱动

String url = pathUrl; // 定义与连接数据库的url

String user = userName; // 定义连接数据库的用户名

String passWord = password; // 定义连接数据库的密码

conn = DriverManager.getConnection(url, user, passWord); // 连接连接

}

catch (Exception e)

{

e.printStackTrace();

}

return conn;

}

/**

* 获取MySQL所有数据库方法

SCHEMATA 这是MySql记录数据库中一共建立了多少个数据库,并保存他们表名的一个数据库表

* @param fileNameAndURL

* @return list

*/

public List getDatabase(String fileNameAndURL)

{

List list = new ArrayList(); // 定义List集合对象

Connection con = getConnection(fileNameAndURL); // 获取数据库连接

Statement st; // 定义Statement对象

try

{

st = con.createStatement(); // 实例化Statement对象

ResultSet rs = st.executeQuery("select schema_name from SCHEMATA");// 指定查询所有数据库方法

while (rs.next()) // 循环遍历查询结果集

{

list.add(rs.getString(1)); // 将查询数据添加到List集合中

}

}

catch (Exception e)

{

e.printStackTrace();

}

return list; // 返回查询结果

}

/**

* 备份数据库

*

* @param fileNameAndURL 配置文件和他的路径

*

* @param database 数据库名

* @param path文件保存路径

* @param userName创建数据库时设定的用户名

* @param password数据库用户密码

* @param localHost主机名或主机地址IP,如 192.168.0.100

* @param CmdDiskmysql.exe、mysqldump.exe这两个文件存放的目录

*/

private void mysqldump(String fileNameAndURL)

{

Connection con = getConnection(fileNameAndURL);

Properties prop = new Properties();

try {

FileInputStream fis = new FileInputStream(fileNameAndURL);

prop.load(fis);

fis.close();

String userName = prop.getProperty("userName");

String password = prop.getProperty("password");

String localHost = prop.getProperty("localHost");//主机名或主机地址IP,如 192.168.0.100

String database = prop.getProperty("database");//数据库名称

String saveDisk = prop.getProperty("saveDisk");//要保存的盘符

String fileName = prop.getProperty("fileName");//要保存成的文件名称

String fileType = prop.getProperty("fileType");//要保存成的文件格式

String CmdDisk = prop.getProperty("CmdDisk");//

String path = saveDisk + fileName + fileType;//构成了完整路径

String Cmd = "cmd.exe /C " + CmdDisk + "mysqldump --hex-blob -u" + userName + " -p" + password + " -h " + localHost + " " + database + " >" + path + "";

//String asd = "cmd.exe /C C:\\mysqldump -uroot -p123456 -h 192.168.0.100 " + database + " >" + path + ""; 原始格式,不要删除该语句

Process p = Runtime.getRuntime().exec(Cmd);//定义进行数据备份的语句

StringBuffer out1 = new StringBuffer(); //定义字符串缓冲对象

byte[] b = new byte[1024]; //定义字节数组

for (int i; ((i = p.getInputStream().read(b)) != -1);) // 将数据写入到指定文件中 mysqldump.exe

{

out1.append(new String(b, 0, i)); //向流中追加数据

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

/**

* 恢复数据库

*

* @param fileNameAndURL 配置文件和他的路径

*

* @param database 数据库名

* @param path文件保存路径

* @param userName创建数据库时设定的用户名

* @param password数据库用户密码

* @param localHost主机名或主机地址IP,如 192.168.0.100

* @param CmdDiskmysql.exe、mysqldump.exe这两个文件存放的目录

*/

private void mysqlresume(String fileNameAndURL)

{

Connection con = getConnection(fileNameAndURL);

Properties prop = new Properties();

try

{

FileInputStream fis = new FileInputStream(fileNameAndURL);

prop.load(fis);

fis.close();

String userName = prop.getProperty("userName");

String password = prop.getProperty("password");

String localHost = prop.getProperty("localHost");//主机名或主机地址IP,如 192.168.0.100

String database = prop.getProperty("database");//数据库名称

String saveDisk = prop.getProperty("saveDisk");//要保存的盘符

String fileName = prop.getProperty("fileName");//要保存成的文件名称

String fileType = prop.getProperty("fileType");//要保存成的文件格式

String CmdDisk = prop.getProperty("CmdDisk");//mysql.exe、mysqldump.exe这两个文件存放的目录

String path = saveDisk + fileName + fileType;//构成了完整路径

String Cmd = "cmd.exe /C " + CmdDisk + "mysql -u" + userName + " -p" + password + " -h " + localHost + " " + database + "

Process p = Runtime.getRuntime().exec(Cmd);

StringBuffer out1 = new StringBuffer(); // 定义字符串缓冲对象

byte[] b = new byte[1024]; // 定义字节数组

for (int i; ((i = p.getInputStream().read(b)) != -1);) // 将数据写入到指定文件中

{

out1.append(new String(b, 0, i)); // 向流中追加数据

}

}

catch (IOException e)

{

e.printStackTrace();

}

}

/**

* 编辑属性文件,向配置文件中写入新的信息

* @param fileNameAndURL

* @param Key

* @param Value

*/

public void propertyEditor(String fileNameAndURL , String Key , String Value)

{

Properties prop = new Properties();

try

{

InputStream fis = new FileInputStream(fileNameAndURL);

prop.load(fis);

prop.setProperty(Key, Value);

OutputStream fos = new FileOutputStream(fileNameAndURL);

prop.store(fos , Key);

fos.flush();

fis.close();

}

catch(IOException e)

{

e.getStackTrace();

}

}

//################################################//

/**

* 备份 可供外界调用的方法

* @param fileNameAndURL

*/

public void dataBaseReserve(String fileNameAndURL)

{

EasyRecovery mc = new EasyRecovery();

mc.mysqldump(fileNameAndURL);

}

/**

* 恢复 可供外界调用的方法

* @param fileNameAndURL

*/

public void dataBaseRecovery(String fileNameAndURL)

{

EasyRecovery mc = new EasyRecovery();

mc.mysqlresume(fileNameAndURL);

}

public static void main(String args[])

{

EasyRecovery mc = new EasyRecovery();

String fileNameAndURL = "E:\\propertiesConfig\\EasyRecoveryConfig.properties";

mc.dataBaseReserve(fileNameAndURL);

mc.propertyEditor(fileNameAndURL, "userName", "Doctor Lee");

mc.dataBaseRecovery(fileNameAndURL);

}

}

--hex-blob;这个命令是用于将导出的内容处理成为2进制流的形式。因为有些时候你会发现,导出的数据库文件大小与数据库本身真实内容的大小存在冲突,往往是小于真实的大小。加入这个命令你就可以解决这个问题了。这个命令加在备份数据库的时候。

这个程序适用于任何Mis系统、ERP系统等,在您的界面中只需要添加两个按钮然后完成相应的事件即可。这个程序也可以将他改成一个Action(EasyRecoveryAction.java),帮助您完成相应的后台请求。初学者,不足之处请您多多指点。相应的项目工程和依赖程序在下面,您可以拿来直接运行。希望对您有所帮助。开源万岁!转载请您注明出处。

分享到:

2012-11-27 19:39

浏览 4870

分类:数据库

评论

mysql blob hex_数据库的完整备份与恢复 quot;--hex-blobquot; - - ITeye博客相关推荐

  1. mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客

    mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客

  2. mysql 安装 大_MYSQL安装问题amp;使用大收集 - 包子 - ITeye博客

    MYSQL安装问题&使用大收集 博客分类: win7 mysql could not start the service mysql error:0的解决方法 我是win7的系统,重新安装My ...

  3. fatjar打包mysql_一个简单的解压ZIP Excl文件---gt;按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中。 - 明月 - ITeye博客...

    写道 一个简单的解压ZIP Excl文件--->按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中. package common.gaoyang; impo ...

  4. 利用VBScript连接mysql数据库_过路老熊_新浪博客

    1.首先需要安装mysql-connector-odbc-3.51.15-win32.msi(安装过程之间下一步就行)(PS:需要注意的是odbc是32位还是64位取决于你计算机/远程计算机上的mys ...

  5. mysql 出现 quot_mysql 出现 quot;the table is fullquot;的问题 - tmuffamd - ITeye博客

    继续折腾NAS- 数据导入到一半又出问题了,复制一个表复制到400多万行的时候提示标题的错误表满了.这让我感到莫名其妙,因为之前导入其他更大的表的时候并没有提示这个错误,又开始了漫长的搜索.检查.重试 ...

  6. hapi mysql项目实战路由初始化_用hapi.js mysql和nuxt.js(vue ssr)开发仿简书的博客项目...

    前言: 预览: 开始: npm i 把mysql配置好 npm run server or npm run dev 实现功能: 用户: 登录.注册.用户资料修改,详情页面,类似于简书的文章数量.总字数 ...

  7. quot;luasql.mysqlquot;_解决mysqlquot;Access denied for user 'root'@'IP地址'quot;问题 - - ITeye博客...

    1. 改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 " ...

  8. libmysqld_dev linux,解决mysql安装mysqld doesn\'t exist or is not-鸟哥のlinux-ChinaUnix博客

    最近phpwind升级8.7后,经常出现宕机的现象,不是Apache卡死,吃光内存机器重启,就是mysql数据库被锁,无奈! 多个原因,apache的版本过低,导致执行效率慢:另外数据库版本过低,查询 ...

  9. 为嘛子要慎用mysql的enum字段?(来自向东的原创博客)

    背景:时下都流行enum类型的使用tinyint,那enum就真没有用的价值了么? PHP低级编程的兄弟是这样来看这个问题的,我作下笔录如下,期望能客观的理解这个enum字段的优点及缺点: 膘哥观点: ...

最新文章

  1. C#-WinForm-无边框窗体的移动和阴影-API
  2. Typora markdown公式换行等号对齐_Typora-编写博客格式化文档的最佳软件
  3. 广州计算机操作员培训,汕尾市计算机操作员报名考试时间地址及培训入口
  4. element提交图片限制一张_element-ui上传图片限制图片比例
  5. “吃神么,买神么”的第一个Sprint计划(第三天)
  6. python环境变量设置失败
  7. Angular2 小贴士 Name
  8. pyqt5 显示更新进度条_python如何通过pyqt5实现进度条
  9. MATLAB【工具箱下载】汇总
  10. 网络接入与身份认证简介
  11. MySQL使用JDBC高级操作和事务
  12. 闲人闲谈PS之二十二——WBS结算规则批量维护函数
  13. speedoffice表格如何全选表格
  14. Python列表练习——用户管理
  15. 数据库字典 - 微擎开发文档
  16. CentOS7.6(1810)安装
  17. 攻防世界xctfweb题leaking题解
  18. 手机如何测光照度_如何3分钟学会用手机的专业模式拍照?
  19. 身体指数bmi流程图_一说减肥就讲BMI,除了身体质量指数,还要关注这些身体数据...
  20. ios 倒数器_Clover旗下iOS应用Widgets全线更新:倒数器、新闻画报、全球天气

热门文章

  1. frameset 后台管理_易达CMS下载-易达CMS(免费开源网站管理系统)v3.0.0.1103免费版
  2. android 手机自动化测试,Appium进行Android手机真机自动化测试
  3. activiti如何最后一次提交事务_2020最后一次水逆,十二星座如何防水逆?
  4. java 线程模型_Java基础篇之Java线程模型
  5. python统计分析--2.预分析:异常值、缺失值处理
  6. oracle 052考试,Oracle OCP认证考试题库解析052-5
  7. c4d fbx大小_C4D设计人员必备的八大外挂神器,爱了爱了!【133期】
  8. java指针的数组_java 指针 数组的使用
  9. C# v7.0版本中的local function
  10. 用camelot读取表格_如何使用Camelot从PDF提取表格