欢迎关注我的公众号

java web 实现mysql 数据库备份、恢复

2022-02-22 09:29
192
1
添加收藏

背景介绍:

  • window 7系统
  • mysql 5.7
  • eclipse
  • spring mvc
  • tomcat 7
  • jdk 1.7

先上代码:

     使用mysql的mysqldump 命令进行备份。 

    
/**
    	 * Java代码实现MySQL数据库备份
    	 * 
    	 * @author lgc
    	 * @param hostIP
    	 *            MySQL数据库所在服务器地址IP
    	 * @param userName
    	 *            进入数据库所需要的用户名
    	 * @param password
    	 *            进入数据库所需要的密码
    	 * @param savePath
    	 *            数据库导出文件保存路径
    	 * @param fileName
    	 *            数据库导出文件文件名
    	 * @param databaseName
    	 *            要导出的数据库名
    	 * @return 返回true表示导出成功,否则返回false。
    	 */
    	public static boolean exportDatabaseTool(String hostIP, String userName, String password, String savePath,
    			String fileName, String databaseName) throws InterruptedException {
    		boolean fa = false;
    		File saveFile = new File(savePath);
    		if (!saveFile.exists()) {// 如果目录不存在
    			saveFile.mkdirs();// 创建文件夹
    		}
    		if (!savePath.endsWith(File.separator)) {
    			savePath = savePath + File.separator;
    		}
    
    		PrintWriter printWriter = null;
    		try {
    			printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
    			String backup = "mysqldump -h" + hostIP + " -u" + userName + " -p" + password + " " + databaseName
    					+ " --set-charset=UTF8 ";
    			String path = "E:\\";//这里是你复制的mysqldump.exe所在的文件目录下
    			String commad = "cmd /c " + path + backup + ">" + savePath + fileName;
    			System.out.println(commad);
    			Runtime.getRuntime().exec(commad);
    			fa = true;
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (printWriter != null) {
    				printWriter.close();
    			}
    		}
    		return fa;
    	}
 

恢复备份:

    
// 数据库恢复
                    	public static void load(String filename) {
                    
                    		 try {
                    			 String path = "E:\\";
                    				String commad = "cmd /c " + path+"mysql -u root -pcisoft jeecms "; 
                    	            Runtime rt = Runtime.getRuntime();
                    	            // 调用 mysql 的 cmd:
                    	            Process child = rt.exec(commad);
                    	            OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流
                    	            String inStr;
                    	            StringBuffer sb = new StringBuffer("");
                    	            String outStr;
                    	            BufferedReader br = new BufferedReader(new InputStreamReader(
                    	                    new FileInputStream(filename), "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();
                    
                    	            System.out.println("/* Load OK! */");
                    
                    	        } catch (Exception e) {
                    	            e.printStackTrace();
                    	        }
                    
                    	}
 

注意事项: mysql 安装在c盘默认路径下,Program Files 文件夹名称之间有空格,导致程序明明运行一切正常,就是无法导出数据,文件大小始终为0kb。 

解决办法: 

1.把mysql 安装目录下-》bin文件夹-》mysqldump.exe ,复制到项目或者任意文件夹,然后程序强制应用 复制后的mysqldump.exe 执行即可

 2.同理mysql安装目录下的mysql.exe,也复制到项目或任意文件夹,然后程序使用时,使用复制的文件的所在路径下即可

全部评论

15177198241
2022-03-04 10:06
111