设为首页 收藏本站
查看: 576|回复: 0

[经验分享] 懒人策略之:批量备份mysql数据库

[复制链接]

尚未签到

发表于 2016-10-18 10:06:03 | 显示全部楼层 |阅读模式
写给和我一样的懒人。
数据库多了,备份起来比较麻烦,虽然有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.iyunv.com/  kskr@qq.com  QQ:376665005
*
* 原文链接:http://huxiao.iyunv.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.iyunv.com/admin/blogs/604093
* 转载请保留作者信息
备份之后,文件夹会自动打开,非常人性化,适合我们懒人一族:

DSC0000.jpg

注:日期方法已经写成5楼说的方法了,简便多了,呵呵3q chujiazhen

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287839-1-1.html 上篇帖子: 使用Flex,Java,Json更新Mysql数据【高级篇】 下篇帖子: hibernate+mysql+ecliple第一次运行错误信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表