我们使用全量备份是dump,增量备份选择binlog

1、首先查看binlog是否启动

进入到mysql中:

mysql -uroot -proot

然后执行如下命令:show variables like ‘log_bin%’;

java操作 mysql clob和blob java mysql binlog_sed


如上图所示,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 指定恢复的位置