前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代码分享:用java备份MySQL数据库

代码分享:用java备份MySQL数据库

作者头像
talent-tan
修改2019-08-05 11:10:49
2.5K0
修改2019-08-05 11:10:49
举报
文章被收录于专栏:t-io小笔记t-io小笔记

原文地址

https://www.t-io.org/1157456456140857344

前言

t-io官网的数据库都会定时备份,并且可以通过http直接下载到本地(这个当然需要特权,不是人人有这个操作权限),为了操作的灵活性,采用java来实现MySql的备份

核心代码

代码语言:txt
复制
package org.tio.sitexxx.service.tool;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author tanyaowu
 */
public class MysqlTool {
	private static Logger log = LoggerFactory.getLogger(MysqlTool.class);
	/**
	 * @param host 数据库服务器主机地址,可以是ip,也可以是域名
	 * @param port 数据库服务器端口
	 * @param dbName 数据库名字
	 * @param username 数据库用户名
	 * @param password 数据库密码(明文)
	 * @param filePath 存到哪个文件,形如:"d:/dbbackup/2019-08-03_00_00_00.sql"
	 * @return
	 */
	public static File backup(String host, int port, String dbName, String username, String password, String filePath) {
		Long starttime = System.currentTimeMillis();
		try {
			File file = new File(filePath);
			String[] commands = new String[3];
			String os = System.getProperties().getProperty("os.name");
			if (os.startsWith("Win")) {
				commands[0] = "cmd.exe";
				commands[1] = "/c";
			} else {
				commands[0] = "/bin/sh";
				commands[1] = "-c";
			}

			StringBuilder mysqldump = new StringBuilder();
			mysqldump.append("mysqldump");
			mysqldump.append(" --opt");

			mysqldump.append(" --user=").append(username);
			mysqldump.append(" --password=").append(password);

			mysqldump.append(" --host=").append(host);
			mysqldump.append(" --protocol=tcp");
			mysqldump.append(" --port=").append(port);

			mysqldump.append(" --default-character-set=utf8");
			mysqldump.append(" --single-transaction=TRUE");

			mysqldump.append(" --routines");
			mysqldump.append(" --events");

			mysqldump.append(" ").append(dbName);
			mysqldump.append(" > ");
			mysqldump.append("").append(filePath).append("");

			String command = mysqldump.toString();
			System.out.println(command);

			commands[2] = command;

			Runtime runtime = Runtime.getRuntime();
			Process process = runtime.exec(commands);
			if (process.waitFor() == 0) {
				Long endtime = System.currentTimeMillis();
				Long distance = endtime - starttime;
				System.out.println("【" + dbName + "】备份成功,耗时:" + distance + "ms");
				return file;
			} else {
				InputStream is = process.getErrorStream();
				if (is != null) {
					BufferedReader in = new BufferedReader(new InputStreamReader(is, "utf-8"));
					String line;
					StringBuilder sb = new StringBuilder();
					while ((line = in.readLine()) != null) {
						sb.append(line);
					}
					System.out.println("数据库备【" + dbName + "】份失败\r\n" + sb.toString());
				}
			}
		} catch (Exception e) {
			log.error("数据库备【" + dbName + "】份失败", e);
			return null;
		}
		return null;
	}
}

非核心代码

非核心代码主要是获取数据库信息这些,同时将生成的SQL做成zip,然后用个定时任务去执行这个程序,这些代码就不贴出来啦

看看效果

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原文地址
  • 前言
  • 核心代码
  • 非核心代码
  • 看看效果
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档