在java代码中备份mysql数据库全量备份和增量备份

我们使用全量备份是dump,增量备份选择binlog
1、首先查看binlog是否启动
进入到mysql中:
mysql -uroot -proot
然后执行如下命令:show variables like ‘log_bin%’;
在这里插入图片描述
如上图所示,login_bin的value是ON的话说明已经开启,如果log_bin的value是OFF的话那么就是关闭
如果是关闭的话,我们需要先停止mysql服务,修改my.ini或者是my.conf,windows使用my.ini文件,linux系统使用的是my.conf文件
我们需要把下面的几句话拷贝进去

basedir  ="C:/BtSoft/mysql/MySQL5.7/"
datadir  ="C:/BtSoft/mysql/MySQL5.7/data/"
tmpdir   ="C:/BtSoft/mysql/MySQL5.7/data/"
socket   ="C:/BtSoft/mysql/MySQL5.7/data/mysql.sock"
log-error="C:/BtSoft/mysql/MySQL5.7/data/mysql_error.log"
log-bin=mysql-bin
binlog_format=mixed
server_id = 1

把你的mysql安装目录换成自己的就可以了(C:/BtSoft/mysql/MySQL5.7/)
然后重新启动一下mysql就可以了,是用一开始的那个命查询一下是否开启成功,还有就是mysql安装路径不要是用中文路径,如果是用中文路径可能配置binlog后无法启动。binlog_format有三种模式,可以自行查阅。
2、编写java代码实现mysql数据库备份
刷新binlog日志的,每当刷新一次就会产生一个新文件,以后的记录都会记录到新的日志文件当中。

@Override
    public void flushlogs() throws  Exception{
        StringBuffer sb = new StringBuffer();
        sb.append(System.getenv("MYSQL_HOME")+"\\bin\\mysqladmin.exe ");
        sb.append("-uroot ");
        sb.append("-pz0vhNswR7XGnjIve ");
        sb.append("-h");
        sb.append("localhost");
        sb.append(" ");
        sb.append("flush-logs ");
        Runtime cmd = Runtime.getRuntime();
        System.out.println(sb.toString());
        @SuppressWarnings("unused")
        Process p = cmd.exec(sb.toString());
    }

全量导出文件

Runtime rt = Runtime.getRuntime();
                Process child = rt.exec(MYSQL_HOME+"\\bin\\mysqldump -h localhost -uroot -pz0vhNswR7XGnjIve task_server");
                // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
                InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
                InputStreamReader xx = new InputStreamReader(in, "utf-8");
                // 设置输出流编码为utf-8。这里必须是utf-8,否则从流中读入的是乱码
                String inStr;
                StringBuffer sb = new StringBuffer("");
                String outStr;
                // 组合控制台输出信息字符串
                BufferedReader br = new BufferedReader(xx);
                while ((inStr = br.readLine()) != null) {
                    sb.append(inStr + "\r\n");
                }
                outStr = sb.toString();
                // 要用来做导入用的sql目标文件:把导出的文件路径放在项目底下

                String filePath=MYSQL_HOME+"\\data\\dump.sql";
                FileOutputStream fout = new FileOutputStream(filePath);
                OutputStreamWriter writer = new OutputStreamWriter(fout, "utf-8");
                writer.write(outStr);
                writer.flush();
                writer.close();
                fout.flush();
                fout.close();
                br.close();
                xx.close();
                in.close();

增量生成新文件只需刷新文件flushlog就可以了,然后需要怎么操作就怎么操作了。
3、恢复文件
首先全量恢复,使用全量恢复命令恢复。
mysql -uroot -proot 数据库名称 < dumpl.sql
然后再增量恢复
mysqlbinlog --no-defaults binlog二进制文件的路径 |mysql -uroot -proot
如果在恢复增量的时候可能出现重复主键,那么查看是不是重复恢复,可以添加从什么位置开始恢复,也可以添加从什么时间点恢复
可以查看二进制文件:
SHOW BINLOG EVENTS IN ‘mysql-bin.000020’;
可以考到具体在什么位置执行什么命令然后是用–start-position 和–sotp-position 指定恢复的位置

有俩片我参考过的文章可以供大家和自己学习:
https://blog.csdn.net/weixin_42204930/article/details/112082353
https://blog.csdn.net/hxspace/article/details/85108283
https://www.cnblogs.com/jpfss/p/11112283.html

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枣泥馅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值