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

闲言少絮,这个程序利用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配置文件来获取外界传递进来的信息。这个文件是自己定义的。其中定义的内容如下:

120930

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),帮助您完成相应的后台请求。初学者,不足之处请您多多指点。相应的项目工程和依赖程序在下面,您可以拿来直接运行。希望对您有所帮助。开源万岁!转载请您注明出处。

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-11-27 19:39

浏览 4870

分类:数据库

评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现多表格合并_用python实现多个表格合并按字段去重

需求 在xx银行项目中遇到的一个需求,是将系统中的8张余额表下载到指定的文件夹中,然后从文件夹中读取这8张余额表,将其合并为一张余额汇总表,在合并的时候要将组合名称重复的多行数据去重,并将其所对应的余额相加 实现…

C# Lambda 和 匿名函数的GC总结

关于Lambda和 匿名函数,闭包的GC,其实可以总结为两条。 为了方便理解,以举例说明,首先我们定义变量,静态变量,以及函数如下: static int staticVariable 0;int variable 0;private void Func…

Unity使用sdkmanager命令行工具安装Android SDK

转自:使用sdkmanager命令行工具安装Android SDK Unity自带的SDKManager没有GUI工具,如果需要其他android SDK版本,可以用Unity自带的SDKManager使用命令行方式安装: 例如安装android27,将目录切到Unity的Android SDK安装目录后&…

mysql c api 封装_封装MySQL C API 基本操作

根据我的以前的文章 http://blog.csdn.net/skyhuangdan/article/details/21099929 链接数据库成功后进行封装。我封装类使用的是VS2005下的win32控制台应用程序编写,预编译头文件了的。所以要在 stdafx.h 里面加入 :#include "CMySQL.h"现在代…

android中怎么保存checkbox中的checked属性_Vue 精粹:v-model指令在组件中怎么玩

最近在写组件的时候,遇到了 v-model 的使用问题,在 Vue 官方文档中,有两小端内容是关于 v-model 指令在组件中的使用,查阅文档后,依然不得要领,最后几番折腾,理论结合实践,终于领悟其精髓&#…

xcode 自动化出包

iOS提高效率之Xcodebuild自动打包总结 - 简书 使用xcodebuild命令进行自动化打包 - 简书 Add a profile to the provisioningProfiles dictionary in your Export Options property list. | 亂馬客 - Re:從零開始的軟體開發生活

linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书

购买SSL证书要想使用https访问你的网址,首先得拥有颁发的SSL证书。我使用的是免费版,有效期为一年,过期后再重新申请。申请SSL证书购买后,可在搜索框输入证书关键字进入到控制台。点击证书申请,按照提示填写完相关信息…

c++头文件能否包含函数实现?

头文件即.h文件一般是用来写函数或者类的定义的&#xff0c;而函数的实现一般在cpp文件中完成&#xff0e;但是我也看到过一些文件就在头文件中同时定义函数和实现&#xff0e;打个比方我现在有个头文件名叫header.h,内容如下 #include <iostream>void printInt(int numb…

mysql rank函数_Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介

排名函数是Sql Server2005新增的功能&#xff0c;下面简单介绍一下他们各自的用法和区别。我们新建一张Order表并添加一些初始数据方便我们查看效果。表结构和初始数据Sql附上表结构和初始数据图&#xff1a;一、ROW_NUMBERrow_number的用途的非常广泛&#xff0c;排序最好用他…

git2.29.2.2怎么安装_MySQL5.5怎么安装

安装MySQL5.5的步骤&#xff1a;1、 官网下载mysql5.5下载地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.5.html#downloads2、 安装mysql5.5注意&#xff0c;安装之前&#xff0c;请关闭杀毒软件。1)、 打开下载的mysql-5.5.53-winx64.msi2) 、点击下一步3)、 选中复…

h、cpp和hpp头文件之间使用区别

hpp&#xff0c;其实质就是将.cpp的实现代码混入.h头文件当中&#xff0c;定义与实现都包含在同一文件&#xff0c;则该类的调用者只需要include该hpp文件即可&#xff0c;无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中&#xff0c;不再生成单…

未声明spire。它可能因保护级别而不可访问_信息系统安全:访问控制技术概述...

1.访问控制基本概念身份认证技术解决了识别“用户是谁”的问题&#xff0c;那么认证通过的用户是不是可以无条件地使用所有资源呢&#xff1f;答案是否定的。访问控制(Access Control)技术就是用来管理用户对系统资源的访问。访问控制是国际标准ISO7498-2中的五项安全服务之一&…

c++反汇编与逆向分析技术揭秘_C++反汇编与逆向分析技术揭秘

一、单类继承在父类中声明为私有的成员&#xff0c;子类对象无法直接访问&#xff0c;但是在子类对象的内存结构中&#xff0c;父类私有的成员数据依然存在。C语法规定的访问限制仅限于编译层面&#xff0c;在编译过程中进行语法检查&#xff0c;因此访问控制不会影响对象的内存…

std::atomic原子操作

第十一节std::atomic原子操作_HITXJ的博客-CSDN博客_std::atomic用法

mysql 列级权限授予用户_mysql 用户及权限管理 小结

MySQL 默认有个root用户&#xff0c;但是这个用户权限太大&#xff0c;一般只在管理数据库时候才用。如果在项目中要连接 MySQL 数据库&#xff0c;则建议新建一个权限较小的用户来连接。在 MySQL 命令行模式下输入如下命令可以为 MySQL 创建一个新用户&#xff1a;新用户创建完…

python if name main 的作用_Python中if __name__ == __main__: 的作用

在很多python脚本中在最后的部分会执行一个判断语句if __name__ "__main__:"&#xff0c;之后还可能会有一些执行语句。那添加这个判断的目的何在&#xff1f; 在python编译器读取源文件的时候会执行它找到的所有代码&#xff0c;而在执行之前会根据当前运行的模块是…

php与mysql列表_PHP+Mysql+jQuery实现的查询和列表框选择

本篇文章主要介绍PHPMysqljQuery实现的查询和列表框选择&#xff0c;感兴趣的朋友参考下&#xff0c;希望对大家有所帮助。本文讲解如何通过ajax查询mysql数据&#xff0c;并将返回的数据显示在待选列表中&#xff0c;再通过选择最终将选项加入到已选区&#xff0c;可以用在许多…

range函数python2和3区别_range函数python2和3区别

range函数是一个用来创建算数级数序列的通用函数&#xff0c;返回一个[start, start step, start 2 * step, ...]结构的整数序列&#xff1b;py2中的range()函数用法&#xff1a;&#xff08;推荐学习&#xff1a;Python视频教程&#xff09; range()返回的是一个列表>>&…

Unity SRP自定义渲染管线 -- 2.Custom Shaders

本章将接着上一篇文章&#xff0c;在初步实现一个渲染管线后来创建自定义的shader。上一篇文章的链接 https://blog.csdn.net/yinfourever/article/details/90516602。在本章中&#xff0c;将完成以下内容&#xff1a; 写一个HLSL Shader定义constant buffer&#xff08;常量缓…

tcp 三次握手与四次挥手_TCP三次握手与四次挥手详解

TCP报文结构源端口和目的端口&#xff1a;各占2个字节&#xff0c;分别写入源端口号和目的端口号。序号&#xff1a;占4个字节。序号使用mod运算。TCP是面向字节流的&#xff0c;在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。故该字段也叫做“报文段序号”。确认序…