Mysql数据库备份

备份数据库
一.使用cmd命令行执行数据备份:
备份命令代码格式:
mysqldump -h数据库服务器IP -P数据库使用端口号 -u账户 -p密码 数据库名>保存路径
mysqldump -h127.0.0.1 -p3306 -uroot -proot zbsqx>D:\MysqlBackup\20190807.sql
在命令行中输入以上代码:
例子:
在这里插入图片描述
以上例子是使用root用户备份数据库zbsqx,数据库端口为3306,数据库位于本机(IP:127.0.0.1)
执行后D盘的MysqlBackup路径下就有了一个名字为20190807.sql的备份文件
在这里插入图片描述
如果提示:不是内部或外部命令时,
主要是mysqldump命令不是在mysql的bin目录下执行,
这里由于我配置了msyql的环境变量,可以在命令窗口的默认目录下执行mysqldump命令。
在环境变量的path栏里面添加mysql下面的bin文件夹路径即可,
例如我是:C:\Program Files\MYSQL\MySQL Server 5.7\bin\
在这里插入图片描述

二.使用Java代码实现数据库备份:
在做项目时,数据库会不断的修改!所以要对数据进行不断备份!如果被修改的数据库出现问题还可以使用以前备份的数据进行临时使用!但使用mysql的select命令来导出数据表,不实用,因为一次只能导出单一表格,而且有数据库权限问题。
所以选择使用mysqldump命令的方法,用java的运行时类Java.lang.Runtime来使用后台窗口才是最佳选择。使用java代码实现数据备份功能实际上也是通过java向命令行写入命令执行,所以建议先在cmd中模拟备份,测试成功后在使用java代码进行备份

例子:

   public class MysqlDataBackup {

   	 //通过主方法对backupdata方法进行调用
   		public static void main(String[] args) throws Exception{
   			try {
   				if (backupdata("127.0.0.1", "root", "root", "D:/MysqlBackup", "2019-08-06.sql", "test")) {
   					System.out.println("数据备份成功!");
   				} else {
   					System.out.println("数据备份失败!");
   				}
   			} catch (InterruptedException e) {
   				e.printStackTrace();
   			}
   		}
   	/**
   	 * Java代码实现MySQL数据库导出
   	 * @param hostIP MySQL数据库所在服务器地址IP
   	 * @param userName数据库用户名
   	 * @param password 数据库密码
   	 * @param savePath 数据库导出文件保存路径
   	 * @param fileName 数据库导出文件文件名
   	 * @param databaseName 要导出的数据库名
   	 * @return 返回true表示导出成功,否则返回false。
   	 */
   	
   	public static boolean backupdata(String hostIP, String userName, String password,  
   			String savePath,String fileName, String databaseName) throws Exception {		
   		File saveFile = new File(savePath);//获取文件路径名
   		
   		if (!saveFile.exists()) {saveFile.mkdirs();}//判断文件是否存在!如果目录不存在创建文件夹
   		
   		//savePath.endsWith(字符)测试此字符串是否以指定的后缀结束
   		if(!savePath.endsWith(File.separator)){savePath = savePath + File.separator;}

   		//创建处理流获取.sql文件保存的位置
   		PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(savePath + fileName), "utf8"));
   		
   		//拼接一段命令使用Runtime使用后台
   		Process process = Runtime.getRuntime().exec(" mysqldump -h" + hostIP + " -u" + userName + " -p" +
   		                                             password + " --set-charset=UTF8 " + databaseName);
   		//获取拼接的字符串转换成流形式
   		InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
   		
   		//创建缓冲流并往缓存流读入.sql文件
   		BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
   		
           String line;  
           //再使用处理流进行打印输出
           while((line = bufferedReader.readLine())!= null){
           	printWriter.println(line);
           }
           //刷新处理流
           printWriter.flush();
           //如果拼接可正常执行时就返回一个成功状态! 0 表示线程正常终止。
   		if(process.waitFor() == 0){
   			return true;
   		}
   		//关闭流
   		bufferedReader.close();
   		printWriter.close();

   		return false;
   	}

执行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值