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

用jsp备份MYSQL数据库的方法(mysqldump: Got error: 1045)

阅读更多
近两天在做些备份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();
        }

    }

}

简单的拿别人的方法做了些总结,供有心之人参考
分享到:
评论
1 楼 defokus 2010-09-28  
测试了一下,发现得到的是一个空的sql文件!

相关推荐

    MySQL错误代码以及出错信息对照大全

    MySQL 错误代码是 MySQL 数据库管理系统中的一种错误处理机制,当 MySQL 遇到某些问题或异常情况时,系统将抛出一个错误代码,该错误代码可以帮助开发者和数据库管理员快速地定位和解决问题。下面是 MySQL 错误代码...

    python备份mysql数据库

    3. mysqldump:mysqldump是MySQL提供的一款命令行工具,用于备份数据库结构和数据。它可以生成SQL语句,这些语句可以在需要时用于重建数据库。 4. PyMySQL:PyMySQL是Python的一个库,它提供了与MySQL数据库交互的...

    python自动备份mysql数据库,并删除七天前文件

    # 备份数据库 backup_file = 'backup.sql' subprocess.call(['mysqldump', '-u', 'root', '-p', 'password', 'database_name'] &gt; backup_file) # 设置备份路径和删除时间范围 backup_folder = '/path/to/backup/...

    mysqldump java远程备份mysql数据库 cmd备份

    MySQL是世界上最流行的关系型数据库管理系统之一,而mysqldump工具是MySQL提供的一个命令行实用程序,用于备份数据库或导出数据。在这个5.6.12版本中,我们可以利用它进行远程数据库备份,这对于数据库管理和维护至...

    windows_下_自动备份mysql数据库--按时间命名备份文件.doc

    本文档介绍了几种在 Windows 环境下实现 MySQL 数据库自动备份的方法,并通过时间戳对备份文件进行命名,方便后续管理和恢复。 #### 二、复制 Date 文件夹备份 **1. 假想环境** - MySQL 安装位置:`C:\MySQL` - ...

    java备份mysql数据库

    5. **执行SQL语句**:备份数据库可能涉及到运行SQL脚本来导出数据。Java程序可以通过JDBC接口执行这些脚本,例如`mysqldump`命令可以用来导出整个数据库或者特定的表。 6. **文件操作**:为了保存备份数据,Java...

    Winform中使用mysqldump实现选择部分表定期备份mysql数据库源码.rar

    Winform中使用mysqldump实现选择部分表定期备份mysql数据库源码.rar Winform中使用mysqldump实现选择部分表定期备份mysql数据库源码.rar Winform中使用mysqldump实现选择部分表定期备份mysql数据库源码.rar Winform...

    mysqldump备份mysql数据库.docx

    备份数据库 mysqldump 提供了多种备份方式,可以备份整个数据库、指定的表或指定的数据。 1. 导出整个数据库的结构和数据:`mysqldump -u "root" -p "pw" [db_Name] &gt; d:\*.sql` 2. 只导出表结构:`mysqldump -u ...

    windows备份mysql数据库bat脚本.rar

    在这个场景中,我们使用的是一个名为"windows备份mysql数据库bat脚本.rar"的压缩包,它包含了一套利用批处理(BAT)文件来自动化MySQL数据库备份的解决方案。下面将详细讲解如何利用BAT脚本来备份MySQL数据库,以及...

    mysql数据库备份mysqldump

    windows下mysql备份,配置信息在\mysql_backup.bat中有说明

    远程备份MySQL数据库

    下面,我们将演示如何使用mysqldump工具备份远程数据库的详细步骤: 步骤1:建立批处理文件 首先,我们需要建立一个批处理文件,以便在Windows操作系统中自动执行备份任务。假设我们的任务是要备份一个位于192.168...

    delphi备份和还原MySql数据库.zip

    《使用Delphi进行MySQL数据库的备份与还原》 在IT领域,数据库的备份与还原是至关重要的环节,尤其是在开发和维护阶段,确保数据的安全性是每个程序员必须关注的问题。本篇将详细介绍如何利用Delphi这一强大的集成...

    mysql数据库备份还原实战操作步骤-mysqldump备份还原

    一、备份数据库 mysqldump 是 MySQL 提供的一种备份工具,使用 mysqldump 可以将 MySQL 数据库中的数据导出到一个文件中,以便在需要时恢复数据库。下面是使用 mysqldump 进行备份的基本语法: mysqldump -h ${sql...

    备份mysql数据结构.docx

    本文将详细介绍两种 MySQL 数据库备份方法:通过 MySQL Workbench 备份数据库和通过 cmd 中 mysql 命令备份数据库。 方法一:通过 MySQL Workbench 备份数据库 MySQL Workbench 是一个功能强大的数据库管理工具,...

    java jsp实现mysql备份还原 代码

    `mysqldump` 是 MySQL 官方提供的用于备份数据库的工具,通过指定不同的参数可以实现不同的备份需求。在这个例子中: - `-h127.0.0.1`:指定 MySQL 服务器的地址为本地。 - `-uroot`:指定登录 MySQL 服务器的用户...

    mysql数据库自动定时备份

    MySQL数据库的自动定时备份是数据库管理中的重要环节,它确保了数据的安全性和可恢复性,尤其是在发生意外情况如系统故障、硬件损坏或人为错误时。本教程将详细讲解如何设置MySQL数据库的自动定时备份,包括步骤、所...

    C#实现MySQL数据库的备份、还原和初始化

    本文将详细介绍如何使用C#来实现MySQL数据库的初始化、备份和还原功能。 首先,数据库的初始化通常指的是创建一个新的数据库。在C#中,你可以通过执行SQL语句来完成这一过程。在给出的代码示例中,`GetExecute`方法...

    MySQL备份数据库的命令.doc

    MySQL备份数据库的命令 MySQL 是一个流行的开源关系型数据库管理系统,备份数据库是数据库管理员的重要任务之一。备份数据库可以防止数据丢失,确保业务连续性。本文将介绍使用 mysqldump 命令备份 MySQL 数据库的...

    定时备份mysql数据库

    定时备份MySQL数据库是一项必不可少的任务,确保在出现意外情况如硬件故障、软件错误或人为操作失误时,能够快速恢复到正常状态。本篇文章将详细介绍如何配置定时备份MySQL数据库,包括每日、每周和每月的备份策略。...

    使用mysqldump命令导出MYSQL数据库

    `mysqldump`是一个强大的命令行工具,它允许用户备份、导出MySQL数据库的数据和结构。这个工具对于开发人员和系统管理员来说是必不可少的,因为它提供了在不同环境之间迁移数据的能力,也可以用于定期备份,防止数据...

Global site tag (gtag.js) - Google Analytics