`
ybhuxiao
  • 浏览: 193319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

懒人策略之:批量备份mysql数据库

阅读更多
写给和我一样的懒人。

数据库多了,备份起来比较麻烦,虽然有Navicat这种工具,但是还是要一个一个去备份,不是很方便,下面这个类可以帮你方便的备份多个数据库。

我所在的是小公司,用到的数据库文件都很小,没见过大的数据库,所以无从测试,有朋友帮忙测试一下,有问题的话描述一下,3q

package com.djwl.tools.database;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

/**
 * 描述:批量备份数据库
 * 
 * 1. 修改数据库链接:ip、username、password
 * 2. 修改输出的文件夹:outputPath
 * 3. 修改getDatabaseList(),加入你的数据库名称
 * 4. 保证你配置了mysql的环境变量
 * 
 * @author 胡晓 http://huxiao.iteye.com/  kskr@qq.com  QQ:376665005
 *
 * 原文链接:http://huxiao.iteye.com/admin/blogs/604093
 * 转载请保留作者信息
 */
public class BackUpMysql {

	private static String ip = "localhost";
	private static String username = "root";
	private static String password = "root";
	
	//输出文件夹,我加了一个时间,保证每次生成在不同的文件夹里面,避免多次备份的文件在同一个文件夹里面,影响视听
	private static String outputPath = "g:/backupdatabase/" + getCurrentDate14() + "/";

	/**
	 * <p>功能描述:备份数据库</p>
	 * 
	 * @param databaseName
	 * @param outputPath
	 * @author 胡晓 <BR> kskr@qq.com <BR>
	 * 时间:Feb 27, 2010 8:34:24 AM <BR>
	 */
	public static void backup(String databaseName) {
		try {
			Process process = Runtime.getRuntime().exec("mysqldump.exe -h" + ip + " -u" + username + " -p" + password + " " + databaseName);

			InputStream input = process.getInputStream();
			InputStreamReader xx = new InputStreamReader(input, "utf8");

			String inputString;
			StringBuffer sb = new StringBuffer("");
			String outputString;
			BufferedReader br = new BufferedReader(xx);
			while ((inputString = br.readLine()) != null) {
				sb.append(inputString + "\r\n");
			}
			outputString = sb.toString();

			FileOutputStream output = new FileOutputStream(outputPath + databaseName + "_" + getCurrentDate14() + ".sql");
			OutputStreamWriter writer = new OutputStreamWriter(output, "utf8");
			writer.write(outputString);
			writer.flush();

			input.close();
			xx.close();
			br.close();
			writer.close();
			output.close();
		} catch (Exception e) {
			System.out.println("备份出错");
			e.printStackTrace();
		}
	}

	/**
	 * <p>功能描述:创建文件夹</p>
	 * 
	 * @param path
	 * @author 胡晓 <BR> kskr@qq.com <BR>
	 * 时间:Feb 27, 2010 8:48:27 AM <BR>
	 */
	public static void createFolder(String path) {
		try {
			File file = new File(path);
			if (!file.exists()) {
				file.mkdirs();
			}
		} catch (Exception e) {
			System.out.println("创建文件夹出错");
			e.printStackTrace();
		}
	}

	/**
	 * <p>功能描述:生成之后自动打开所在文件夹</p>
	 * 
	 * @param folderPath
	 * @author 胡晓 <BR> kskr@qq.com <BR>
	 * 时间:Feb 27, 2010 8:48:37 AM <BR>
	 */
	public static void openFolder(String folderPath) {
		try {
			// 打开所在文件夹
			String path = folderPath.replaceAll("/", "\\\\");
			String cmd[] = { "explorer.exe", path };
			Runtime.getRuntime().exec(cmd);
		} catch (Exception e) {
			System.out.println("打开文件夹“" + folderPath + "”出错");
			e.printStackTrace();
		}
	}
	

	/**
	 * <p>功能描述:获取14位的当前时间</p>
	 * 
	 * @return
	 * @author 胡晓 <BR> kskr@qq.com <BR>
	 * 时间:Feb 27, 2010 8:47:36 AM <BR>
	 */
	public static Long getCurrentDate14(){
		return Long.parseLong(new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()).toString());
	}

	/**
	 * <p>功能描述:获取数据库列表</p>
	 * 
 * 这里的数据库列表实际上是可以从mysql自带的information_schema数据库中的tables表中读出来的,如果你懒得像我这样一一列举,可以采取那种方式
	 * @return
	 * @author 胡晓 <BR> kskr@qq.com <BR>
	 * 时间:Feb 27, 2010 8:48:58 AM <BR>
	 */
	public static List<String> getDatabaseList() {
		List<String> list = new ArrayList<String>();
		list.add("aliwangpu");
		list.add("djwl");
		list.add("dog");
		list.add("dyfy");
		list.add("fydagl");
		list.add("hngk");
		list.add("hxzg");
		list.add("oa");
		list.add("practise");
		list.add("qzjy");
		list.add("salecount");
		list.add("swcm");
		list.add("xszp");
		list.add("yfhj");
		list.add("yfjy");
		return list;
	}

	public static void main(String[] args) {
		createFolder(outputPath);

		for (String databaseName : getDatabaseList()) {
			backup(databaseName);
		}

		openFolder(outputPath);
	}
}



* 原文链接:http://huxiao.iteye.com/admin/blogs/604093
* 转载请保留作者信息

备份之后,文件夹会自动打开,非常人性化,适合我们懒人一族:





注:日期方法已经写成5楼说的方法了,简便多了,呵呵3q chujiazhen
  • 大小: 76.2 KB
10
2
分享到:
评论
7 楼 系统程序 2010-03-07  
anry513 写道

写个定时器,然后加入服务, 定时自动备份,就更适合懒人了。


我就这样做的,同时还自动ftp到另外一个机房的服务器上去,不用下载到本地了,过十天半月检查一下有没有正常运行就是了
6 楼 ybhuxiao 2010-03-05  
anry513 写道


写个定时器,然后加入服务, 定时自动备份,就更适合懒人了。


有道理,有道理 懒中更有懒中手啊


chujiazhen 写道
getCurrentDate14 <=> new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()),这样应该更好

nini99999 写道
日期直接格式化就好了 搞的这么复杂


是的是的,日期方法写的复杂了,呵呵
5 楼 chujiazhen 2010-03-03  
getCurrentDate14 <=> new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()),这样应该更好
4 楼 anry513 2010-03-02  
nini99999 写道
日期直接格式化就好了 搞的这么复杂

同意。

写个定时器,然后加入服务, 定时自动备份,就更适合懒人了。

liwenso 写道
呵呵,这个东西很有用,不过数据库表的获得建议使用数据库的元数据来获得,不要采取这种硬编码,容易出错!

这个不是很同意,楼主是想备份自己需要备份的表。如果使用数据库的元数据获取表,还不如直接用mysql命令备份库,就不用单个的备份表了,不过可以做个配置文件。来决定所备份的表和所备份的库。
3 楼 nini99999 2010-03-01  
日期直接格式化就好了 搞的这么复杂
2 楼 liwenso 2010-03-01  
呵呵,这个东西很有用,不过数据库表的获得建议使用数据库的元数据来获得,不要采取这种硬编码,容易出错!
1 楼 Sunny_kaka 2010-03-01  
确实是好东西..
顶一个

相关推荐

    完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错--freepdb.cmd handle.exe

    文末给出一个完美的解决方案和一个懒人补丁包。问题描述如下:在重新编译的时候,经常报错: fatal error LNK1201: 写入程序数据库“.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够

    MySQL8 Ubuntu16.04 64位 懒人安装包

    MySQL8在Ubuntu 16.04 64位系统上的安装通常涉及到多个步骤,包括获取软件源,更新系统库,安装依赖项,配置服务,以及初始化数据库。这个"MySQL8 Ubuntu16.04 64位 懒人安装包"提供了便捷的方式,通过一个名为`...

    懒人美食帮小程序-毕业设计,基于微信小程序+SpringBoot+MySql开发,源码+数据库+毕业论文+视频演示

    懒人美食帮小程序-毕业设计,基于微信小程序+SpringBoot+MySql开发,源码+数据库+毕业论文+视频演示 人民生活水平的提高就会造成生活节奏越来越快,很多人吃饭都采用点外卖的方式。现在点外卖的平台已有很多,大多...

    IDEA懒人必备插件:自动生成单元测试1.7.4版本

    本文将详细介绍一款名为"Squaretest"的插件,它专为那些希望简化单元测试创建过程的“懒人”设计,帮助开发者快速自动生成单元测试代码。 首先,我们来理解单元测试的重要性。单元测试是软件开发中的一个关键环节,...

    mysql5.7.30.zip(mysql5.7.30一键安装部署)

    MySQL 5.7.30 是一个非常重要的数据库管理系统版本,尤其对于那些依赖高效、稳定存储和处理数据的IT环境而言。在这个一键安装部署的压缩包中,我们主要涉及以下几个核心知识点: 1. **MySQL 5.7.30**: 这是MySQL...

    数据库注入工具SQLTool

    SQLTool是一款专为MySQL数据库设计的实用工具,它集成了数据库备份、恢复以及SQL语句执行的功能,对于开发者和数据库管理员来说,这是一个非常便利的工具。在IT领域,数据库管理是核心任务之一,而SQLTool能够有效地...

    sqlit数据库,新手懒人包,可以直接打开SSar20210430.7z

    sqlit数据库,新手懒人包,可以直接打开

    懒人外卖源码(移动端+服务端+数据库+部署说明).rar

    这是一个外卖点餐系统,包括了移动端App、服务端(中台)和商家的后台管理,移动端为Android,服务端.net MVC搭建,数据库sqlserver。还原数据库,更改接口地址即可运行,还原数据库记得使用sqlserver 2014及以上。...

    [] - 2022-12-11 IDEA懒人必备插件:自动生成单元测试,太爽了!.pdf

    互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...

    CitronDB:通过结构和反射来简化MySQL数据库处理的API

    这个图书馆是为像我这样的懒人而设计的麻烦使用SQL语法来操作项目中的数据库。 如果您具备一些SQL技能,而您的时间却不那么宝贵, 也许您应该没有此库,尤其是在预期性能的情况下。 :blue_heart: 优点: 更快地...

    lua 懒人精灵懒人精灵懒人精灵懒人精灵

    懒人精灵懒人精灵懒人精灵懒人精灵懒人精灵懒人精灵

    Oracle数据库工具安装包(免安装)

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,尤其在企业级应用中占据了重要的地位。本文将详述“Oracle数据库工具安装包(免安装)”的相关知识点,包括Oracle Client 11.2版本以及32位系统兼容性,...

    高仿懒人图库帝国CMS CMS7.0模板

    高仿懒人图库帝国CMS CMS7.0模板 这个模板这真的不错!做素材,图片站不二的选择,导航黑色挺喜欢的; 高仿懒人图库帝国CMS CMS7.0模板 免费下载地址: ... 高仿懒人图库帝国CMS CMS7.0模板 ...本模板为CMS7.0 GBK编码,...

    自适应各终端懒人网址导航源码v2.2

    自适应各终端懒人网址导航源码v2.2 此版本是在原2.0版本的基础上修复和增加了些功能。 推荐直接使用新版本,舍弃旧版本,后期会继续不定期更新。 测试环境 宝塔Nginx -Tengine2.2.3的PHP5.6 + MySQL5.6.44 先导入...

    AutoHotKey 懒人包+快餐店+编辑器

    AutoHotKey 懒人包 内容: AHK 中文汉化 AHK 脚本编辑器 SciTe AHK 快餐店系列教程 实用脚本

    mysql5.7.21.zip(mysql5.7.21一键安装部署)

    `mysql-community-client-5.7.21-1.el7.x86_64.rpm` 包含了MySQL的命令行客户端工具,如`mysql`、`mysqldump`等,用于连接数据库、管理用户、备份和恢复数据等。 `mysql-community-embedded-compat-5.7.21-1.el7....

    按键精灵的懒人插件12

    懒人插件是按键精灵用户为了简化和增强其功能而开发的一系列第三方插件之一,通常包含了一些预设的脚本、模板或者工具,使得非编程背景的用户也能方便地创建和运行自动化脚本。这个"lxj_Plug.dll"文件很可能是懒人...

    懒人精灵源码懒人精灵源码懒人精灵源码懒人精灵源码

    【标题】懒人精灵源码 懒人精灵源码是一个重要的软件或插件项目,它可能涉及编程语言、软件工程、自动化工具等多个IT领域的知识点。从"懒人精灵"这个名字可以推测,它可能是为了简化用户操作,提高效率而设计的一款...

    帝国CMS懒人图库模板

    综上所述,"帝国CMS懒人图库模板"融合了帝国CMS的系统架构、前端开发、数据库设计、图片处理、SEO策略、权限控制等多个方面的知识,为构建一个功能齐全、用户体验优秀的图库网站提供了基础。开发者在使用这个模板时...

Global site tag (gtag.js) - Google Analytics