java实现备份mysql、恢复mysql

1.背景

今天需要对mysql进行定时备份,并且根据备份记录恢复数据,这篇文章主要记录备份过程。

2.核心

mysql备份命令:mysqldump -h{host} -u{user} -p{password} {dbName} > {backupDir}
mysql恢复命令:mysql -h{host} -u{user} -p{password} {dbName} < {backupDir}
java执行命令工具类:采用第三方java工具类Hutool的命令行工具-RuntimeUtil

3.注意点

1.通过java执行mysql备份命令时,如果是将所有的参数拼接为一条命令时,即直接执行mysqldump -h{host} -u{user} -p{password} {dbName} > {backupDir},需要将 > 替换为 -r
2.执行mysql备份命令时,如果是将所有的参数拼接为一条命令时,即直接执行mysql -h{host} -u{user} -p{password} {dbName} < {backupDir},需要在命令前先执行 /bin/sh-c

//判断操作系统请参考:http://blog.chinaunix.net/uid-29491520-id-4471694.html
public static List<String> initCommands() {
    List<String> commands = CollectionUtil.newArrayList();
    if (OperatingSystemEnum.getOperatingSystem() == Linux) {
        commands.add("/bin/sh");
        commands.add("-c");
    }
    if (OperatingSystemEnum.getOperatingSystem() == Windows) {
        commands.add("cmd /c");
    }
    return commands;
}

3.RuntimeUtil执行完命令后,调用waitFor()方法可以判断脚本是否执行成功,返回0执行成功,非0则执行失败。如果执行的是脚本文件,该返回值应该是最后一条命令执行结果的返回值(不确定,实际测试总结的粗浅想法,有朋友知道可以告诉下我)。通过getResult()方法可以获得脚本执行中的输出。简单理解为,waitFor()返回非0时,getResult()返回的是错误信息。
4.RuntimeUtil的getResult()和 getErrorResult()不能同时调用。

4.代码记录

4.1java执行脚本

List<String> commands = OperatingSystemEnum.initCommands();
commands.add(script);
Process process = RuntimeUtil.exec(commands.toArray(new String[commands.size()]));
exitValue = process.waitFor();
if (exitValue != GlobalConst.NoForInt) {//GlobalConst.NoForInt就是0
    errorResult = RuntimeUtil.getResult(process);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值