近两天在做些备份MYSQL数据库的程序,找了些资料,加上自己理解的一些东西粘贴上来,供大家参考:
package com.res;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class BakMysql {
//main的方法,主要是我用于测试的,是想着取得CLASS的路径,然后备份的文件写在服务器的类路径下
public static void main(String[] args) {
BakMysql bk = new BakMysql();
/*System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
System.out.println(BakMysql.class.getClassLoader().getResource(""));
System.out.println(ClassLoader.getSystemResource(""));
System.out.println(BakMysql.class.getResource(""));
System.out.println(BakMysql.class.getResource("/")); //Class文件所在路径
System.out.println(new File("/").getAbsolutePath());
System.out.println(System.getProperty("user.dir")); */
//bk.backup();
//bk.load();
//bk.backupMySql();
}
//backup方法是备份数据库到服务器地址
public void backup() {
try {
String filePath = System.getProperty("user.dir") + "\\bjcert3.sql";//BakMysql.class.getResource("").toString();
System.out.println();
Runtime rt = Runtime.getRuntime();
// 调用 mysql 的 cmd:
Process child = rt.exec("mysqldump -uroot -pmysql dbname");// 设置导出编码为utf8。这里必须是utf8
注意这一句,是指运行mysqldump命令,后面跟的是登录名和登录的密码,接着后面的是指备份的数据库的名字,到此结束,以此生成一个执行的进程,取得此进程的输出流到我们要备份的文件
// 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 组合控制台输出信息字符串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();//备份出来的内容是一个字条串
// 要用来做导入用的sql目标文件:
FileOutputStream fout = new FileOutputStream(filePath);
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);//写文件
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
// 别忘记关闭输入输出流
in.close();
xx.close();
br.close();
writer.close();
fout.close();
System.out.println("");
} catch (Exception e) {
e.printStackTrace();
}
}
//我在JSP里面主要用的是下面的方法,直接输出字符串到我的页面dbbak.jsp,这样用户在备份的时候可以直接下载文件
/jsp 开始/
<%@ page language="java" import="java.util.*,com.res.BakMysql" pageEncoding="UTF-8"%>
<%
response.reset();
response.setHeader("Content-Disposition", "attachment;filename=test.sql");
response.setContentType("application/x-download; charset=utf-8");
String sql = "";
try {
com.res.BakMysql bm = new com.res.BakMysql();
sql = bm.backupMySqlToFile();
} catch(Exception e) {
System.out.println(e);
}
%>
<%=sql%>
/jsp结束
public String backupMySqlToFile() {
String outStr = "";
try {
Runtime rt = Runtime.getRuntime();
Process child =
rt.exec("mysqldump -uroot -pmysql dbname");// 设置导出编码为utf8。这里必须是utf8在此要注意,有时会发生一个mysqldump: Got error: 1045的错误,此时mysqldump必须加上你要备份的数据库的IP地址,即mysqldump -h192.168.0.1 -uroot -pmysql dbname,今天我就遇到了这样的问题,呵呵 // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
String inStr;
StringBuffer sb = new StringBuffer("");
// 组合控制台输出信息字符串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
in.close();
xx.close();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return outStr;
}
public void load() {
try {
String fPath = "c:\\test.sql";
Runtime rt = Runtime.getRuntime();
Process child = rt.exec("mysql -uroot -pmysql bjtest");
OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fPath), "utf8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writer.write(outStr);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
out.close();
br.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//当用户恢复数据的时候,直接传一个上传的文件给这个方法,就可以对数据库进行恢复了
public void restoreMysqlFromFile(File f) {
try {
FileInputStream fis = new FileInputStream(f);
Runtime rt = Runtime.getRuntime();
Process child = rt.exec("mysql -uroot -pmysql dbname");//这里执行的是mysql命令,用户名,密码以及要恢复的数据库,命令执行完后会从我们上传的文件里面读取要执行的内容
OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(fis, "utf8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writer.write(outStr);
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
out.close();
br.close();
writer.close();
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
简单的拿别人的方法做了些总结,供有心之人参考
分享到:
相关推荐
MySQL 错误代码是 MySQL 数据库管理系统中的一种错误处理机制,当 MySQL 遇到某些问题或异常情况时,系统将抛出一个错误代码,该错误代码可以帮助开发者和数据库管理员快速地定位和解决问题。下面是 MySQL 错误代码...
3. mysqldump:mysqldump是MySQL提供的一款命令行工具,用于备份数据库结构和数据。它可以生成SQL语句,这些语句可以在需要时用于重建数据库。 4. PyMySQL:PyMySQL是Python的一个库,它提供了与MySQL数据库交互的...
# 备份数据库 backup_file = 'backup.sql' subprocess.call(['mysqldump', '-u', 'root', '-p', 'password', 'database_name'] > backup_file) # 设置备份路径和删除时间范围 backup_folder = '/path/to/backup/...
MySQL是世界上最流行的关系型数据库管理系统之一,而mysqldump工具是MySQL提供的一个命令行实用程序,用于备份数据库或导出数据。在这个5.6.12版本中,我们可以利用它进行远程数据库备份,这对于数据库管理和维护至...
本文档介绍了几种在 Windows 环境下实现 MySQL 数据库自动备份的方法,并通过时间戳对备份文件进行命名,方便后续管理和恢复。 #### 二、复制 Date 文件夹备份 **1. 假想环境** - MySQL 安装位置:`C:\MySQL` - ...
5. **执行SQL语句**:备份数据库可能涉及到运行SQL脚本来导出数据。Java程序可以通过JDBC接口执行这些脚本,例如`mysqldump`命令可以用来导出整个数据库或者特定的表。 6. **文件操作**:为了保存备份数据,Java...
Winform中使用mysqldump实现选择部分表定期备份mysql数据库源码.rar Winform中使用mysqldump实现选择部分表定期备份mysql数据库源码.rar Winform中使用mysqldump实现选择部分表定期备份mysql数据库源码.rar Winform...
备份数据库 mysqldump 提供了多种备份方式,可以备份整个数据库、指定的表或指定的数据。 1. 导出整个数据库的结构和数据:`mysqldump -u "root" -p "pw" [db_Name] > d:\*.sql` 2. 只导出表结构:`mysqldump -u ...
在这个场景中,我们使用的是一个名为"windows备份mysql数据库bat脚本.rar"的压缩包,它包含了一套利用批处理(BAT)文件来自动化MySQL数据库备份的解决方案。下面将详细讲解如何利用BAT脚本来备份MySQL数据库,以及...
windows下mysql备份,配置信息在\mysql_backup.bat中有说明
下面,我们将演示如何使用mysqldump工具备份远程数据库的详细步骤: 步骤1:建立批处理文件 首先,我们需要建立一个批处理文件,以便在Windows操作系统中自动执行备份任务。假设我们的任务是要备份一个位于192.168...
《使用Delphi进行MySQL数据库的备份与还原》 在IT领域,数据库的备份与还原是至关重要的环节,尤其是在开发和维护阶段,确保数据的安全性是每个程序员必须关注的问题。本篇将详细介绍如何利用Delphi这一强大的集成...
一、备份数据库 mysqldump 是 MySQL 提供的一种备份工具,使用 mysqldump 可以将 MySQL 数据库中的数据导出到一个文件中,以便在需要时恢复数据库。下面是使用 mysqldump 进行备份的基本语法: mysqldump -h ${sql...
本文将详细介绍两种 MySQL 数据库备份方法:通过 MySQL Workbench 备份数据库和通过 cmd 中 mysql 命令备份数据库。 方法一:通过 MySQL Workbench 备份数据库 MySQL Workbench 是一个功能强大的数据库管理工具,...
`mysqldump` 是 MySQL 官方提供的用于备份数据库的工具,通过指定不同的参数可以实现不同的备份需求。在这个例子中: - `-h127.0.0.1`:指定 MySQL 服务器的地址为本地。 - `-uroot`:指定登录 MySQL 服务器的用户...
MySQL数据库的自动定时备份是数据库管理中的重要环节,它确保了数据的安全性和可恢复性,尤其是在发生意外情况如系统故障、硬件损坏或人为错误时。本教程将详细讲解如何设置MySQL数据库的自动定时备份,包括步骤、所...
本文将详细介绍如何使用C#来实现MySQL数据库的初始化、备份和还原功能。 首先,数据库的初始化通常指的是创建一个新的数据库。在C#中,你可以通过执行SQL语句来完成这一过程。在给出的代码示例中,`GetExecute`方法...
MySQL备份数据库的命令 MySQL 是一个流行的开源关系型数据库管理系统,备份数据库是数据库管理员的重要任务之一。备份数据库可以防止数据丢失,确保业务连续性。本文将介绍使用 mysqldump 命令备份 MySQL 数据库的...
定时备份MySQL数据库是一项必不可少的任务,确保在出现意外情况如硬件故障、软件错误或人为操作失误时,能够快速恢复到正常状态。本篇文章将详细介绍如何配置定时备份MySQL数据库,包括每日、每周和每月的备份策略。...
`mysqldump`是一个强大的命令行工具,它允许用户备份、导出MySQL数据库的数据和结构。这个工具对于开发人员和系统管理员来说是必不可少的,因为它提供了在不同环境之间迁移数据的能力,也可以用于定期备份,防止数据...