Mysql数据库备份与恢复。

该代码段展示了如何在Java中使用注解获取Spring动态数据源的主库连接信息,然后基于当前系统是Linux还是Windows来构建mysqldump命令进行数据库备份。备份过程中会创建目标文件夹,拼接备份命令并执行。对于恢复操作,文章通过建立数据库连接,使用ScriptRunner类读取SQL文件并执行来实现数据还原。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 备份:

   @Value(value = "${spring.datasource.dynamic.datasource.master.url}")
    private String url;


    @Value(value = "${spring.datasource.dynamic.datasource.master.username}")
    private String username;



    @Value(value = "${spring.datasource.dynamic.datasource.master.password}")
    private String password;
    


 public Result MySqlBackups(){
        String path="D:\\";
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
        String fileName = path + "/"  + LocalDate.now() + ".sql";
        /** 默认使用linux*/
        //String cmdPrefix = "/bin/sh -c ";
        String c1 = "/bin/sh";
        String c2 = "-c";
        String os_name = System.getProperty("os.name");
        // 判断是否是windows系统
        if (os_name.toLowerCase().startsWith("win")){
            //cmdPrefix = "cmd /c ";
            c1 = "cmd";
            c2 = "/c";
        }
        String database = url.substring(url.indexOf("3306/") + 5,url.indexOf("?"));
        System.out.println(database);

        String cmd = "mysqldump"  // mysqldump的绝对路径,配置环境变量,直接写mysqldump即可
                + " -u" + username  // 数据库用户名
                + " -p" + password// 数据库密码
                + " -P" + "3306"      // 数据库端口号
                + " " + database      // 数据库名
                + " > " + fileName;                   // 最终写入的文件路径
        try {
            Process process = Runtime.getRuntime().exec(new String[]{c1, c2, cmd});
            process.waitFor();
            System.out.println("数据库备份END" + LocalDateTime.now());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println( e.getMessage());
        }
        return Result.OK("MYSQL数据备份成功");
    }

简单说一下备份流程:

1、创建文件位置(可以有,也可以没有)

2、因为部署一般都是Linux操作系统,所以分2部分命令。win和linux

3、拼接cmd命令

4、命令传入开始备份。

网上都是大差不差,备份流程一般都是一样的。

恢复:

//MYSQL恢复
    public  Result getMySqlConnection(){
        try {
            Connection conn = DriverManager.getConnection(url, username, password);
            ScriptRunner runner = new ScriptRunner(conn);
            Resources.setCharset(Charset.forName("UTF-8")); //设置字符集,不然中文乱码插入错误
            runner.setLogWriter(null);//设置是否输出日志
            // 绝对路径读取
           // Reader read = new FileReader(new File("D:\\"+"2023-04-18.sql"));
            Reader read = new FileReader("D:\\"+"2023-04-18.sql");
            // 从class目录下直接读取
            //Reader read = Resources.getResourceAsReader("test.sql");
            runner.runScript(read);
            runner.closeConnection();
            conn.close();

            return Result.OK("还原成功!");
        } catch (Exception e) {
            e.printStackTrace();

            return Result.error( "sql脚本执行发生异常!");
        }
    }

恢复的流程就是传入数据库地址账号密码,你和要恢复的文件地址名称。

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值