专栏首页t-io小笔记代码分享:用java备份MySQL数据库

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

原文地址

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

前言

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

核心代码

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,然后用个定时任务去执行这个程序,这些代码就不贴出来啦

看看效果

原文链接:https://www.t-io.org/1157456456140857344

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mysql索引知识详谈

    原文地址:https://www.t-io.org/1159984867644153856

    talent-tan
  • 学习T-io框架,从写一个Redis客户端开始

      了解T-io框架有些日子了,并且还将它应用于实战,例如 tio-websocket-server,tio-http-server等。但是由于上述两个serv...

    talent-tan
  • 基于t-io官网源码旗舰版App socket对接的一点经验

    原文转载自:https://www.t-io.org/1154654880242212864

    talent-tan
  • 不止财务自由的诱惑:最顶级的AI科学家正在离开大学

    大数据文摘
  • 脑洞清奇AI君,给小猫咪们起了8000多个无厘头名字丨Colab Demo可用

    这是一位美国博主用AI给猫咪起的名字之一,她收集了费城的莫里斯动物保护所(Morris Animal Refuge)数百只猫咪的名字,还有注册在多伦多的几千只宠...

    量子位
  • Java工具集-线程池工具

    cwl_java
  • AI 一分钟 | 微软推出全新人工智能平台;多名用户反映亚马逊 Echo 智能音箱突然发笑

    整理 | Leo 一分钟AI 1、华为麒麟670曝光,定位中端新增AI功能 2、海尔与百度启动智慧家庭战略合作,加速布局语音交互技术商业化 3、多名用户反映亚马...

    AI科技大本营
  • 高通股价1小时暴涨23%的背后,除了5G芯片还有什么值得关注

    上周,苹果和高通联合发布声明,放弃在全球层面的所有法律诉讼,签署至少六年的专利许可协议和多年的芯片组供应协议。声明发出后1小时,高通股票暴涨23%收盘。高通股票...

    大数据文摘
  • 学界 | 突破!引用率前10%AI论文中国占比高达26.5%,明年有望超越美国

    AI 科技评论按:总部位于西雅图的艾伦人工智能研究所(Allen Institute for Artificial Intelligence)于昨日发布的报告中...

    AI研习社
  • 单链表的头尾插法详解

    head 结点的数据域为空 head -> data = NULL, ,地址域为空 head -> next = NULL;

    忆想不到的晖

扫码关注云+社区

领取腾讯云代金券