2025年sqlyog打开sql文件(怎样打开sql文件)

sqlyog打开sql文件(怎样打开sql文件)p 1 有一个需要备份的功能 p 失效数据且 6 个月前的数据 备份到备份表 再删除原数据 本来可以直接这样写 但是因为项目之前做了数据库字段加密 使用了 sharding 的加密数据源 EncryptDataS 使用版本 lt dependency gt lt groupId gt org apache

大家好,我是讯享网,很高兴认识大家。



 <p>1、有一个需要备份的功能。</p> 

讯享网

        失效数据且6个月前的数据,备份到备份表。再删除原数据。本来可以直接这样写:

讯享网

        但是因为项目之前做了数据库字段加密,使用了sharding的加密数据源:EncryptDataSource,使用版本:

&lt;dependency&gt;
&lt;groupId&gt;org.apache.shardingsphere&lt;/groupId&gt;
&lt;artifactId&gt;sharding-jdbc-spring-boot-starter&lt;/artifactId&gt;
&lt;version&gt;4.1.1&lt;/version&gt;
&lt;/dependency&gt;

        这种数据源虽然对加密比较方便,代码无侵入,但是有很多sql功能却不支持(参见文末)。比如本次的insert into …. select.

       

二、调整思路

        1、可以单独写job,先查询,再整体插入,再删除。 但是这样麻烦些。

        2、不使用加密数据源EncryptDataSource,使用其他的数据源,就可以支持insert… select了。

三、 于是,自行引入未加密的数据源:

 

        使用此数据源执行sql(其实跟手写数据源链接差不多O_o):

讯享网

        

        数据库链接如果不关闭会怎样?

        可以看到以下现象,生成的每一个代理对象,都是不同的对象。 在获取100次之后,开始报错,告知maxActive数目和active数目一致,且没有创建新的链接。获取超时。 即每一个获取都占用了一个链接,而且不会释放。

 

        当正常执行close之后,就是如下现象:每次获取的都是同一个代理对象,且不会超出100个的限制。

讯享网

        


讯享网

=======================================================

附:EncryptDataSource不支持的sql(参考):

一、mybatis中sql字符串用‘’,不能使用“”

        如果使用双引号,由于sharding语法校验严格,会解析为字段,导致sql解析错误

二、ON DUPLICATE KEY UPDATE语句中不能使用#{},\({}</h4> <p><img alt="" height="288" src="https://i-blog.csdnimg.cn/direct/ef78774e5fbf41d6b12013f9ef7ddc3d.png" width="1200" /></p> <p>        引入sharding数据源后&#xff0c;如果使用mysql 提供的 主键冲突时 进行更新操作的语句 ON DUPLICATE KEY UPDATE&#xff1b;因为数据库被代理&#xff0c;所以在 ON DUPLICATE KEY UPDATE语句中不能使用#{},\){}, 需要使用VALUES方法。

三、不支持case when,having,union 等

  1. 可解析至第一个含表的子查询,在下层嵌套再次找到子查询抛错

子查询不支持聚合函数,不支持含shema的SQL:shardingsphere对sql的访问都是在同一个逻辑schema上

  1. 不支持CASE WHEN、HAVING、UNION (ALL)、有限支持子查询
  2. insert语句中,VALUES语句不支持运算表达式
  3. 不支持INSERT .. SELECT
  4. 不支持包含schema的语句
  5. 脱敏字段无法支持比较操作,如:大于小于、ORDER BY、BETWEEN、LIKE等。
  6. 脱敏字段无法支持计算操作,如:AVG、SUM以及计算表达式 。

四、Mysql like会导致无法使用脱敏字段

如果对脱敏字段使用like,会导致sharding不会对where条件内的原文字段进行替换为脱敏字段,依然使用原文字段擦汗寻

五、Mysql 方法函数不能省略()

        如果sql中的方法函数省略(),会导致sql解析异常

        

六、使用between,in等关键字时不能使用DATE_FORMAT函数

  1. 使用in,between时候,如果使用DATE_FORMAT函数,会导致sql解析异常
  2. 使用DATE_FORMAT函数时候支持=,&gt;,&lt;等简单比较操作

七、sharding 在insert时候 原有sql有字段值直接写死的情况

  1. sharding 在insert时候如果原有sql有字段值直接写死的情况,如status=1,在编译的时候会导致sql注入的值位置错误,字段位置对应不上的情况
  2. 解决方法:1. 写死值改为参数注入 2.把加密字段的#{}提到sql最前面

八、数据库时间转换LocalDateTime,LocalDate,LocalTime错误

  1. 由于目前引入sharding版本,不支持jsr310日期标准,需要通过引入jar形式解决日期类型转换问题(但是里文件路径需要保持mybatis原有转换器路径org.apache.ibatis.type)
  2. 引入sharding后,mybatisPlus时间类型转为LocalDateTime,LocalDate,LocalTime时会转换失败,可以引入mybatis-typehandlers-jsr310解决,但是需要在mybatis-plus-boot-starter前引入

【mybatis-typehandlers-jsr310】和【mybatis】在org.apache.ibatis.type路径下的类重复,需保证优先加载前者的类。感兴趣的可以研究下类加载顺序的控制,暴力解决可以把mybatis-plus-boot-starter版本降到2.3.3,但需关注会不会引发其他问题

—————————
&lt;dependency&gt;
    &lt;groupId&gt;org.mybatis&lt;/groupId&gt;
    &lt;artifactId&gt;mybatis-typehandlers-jsr310&lt;/artifactId&gt;
    &lt;version&gt;1.0.2&lt;/version&gt;
&lt;/dependency&gt;

九、使用sharding同时配置分库分表和脱敏时,配置方式和单独脱敏不一样

  • 需要配置encryptors的type,不需要配aes.key.value,sdk升级&gt;1.2.11,参考如下:(详细可参考官方文档)
     
     

十、不支持语法:now() between start and end

  • 可修改为 start &gt; now() and end &lt; now()

十一、启动报错:StringToDuration

  • 不支持duration对象的配置解析,可升级guava至最新版本

十二、sharding与DruidDataSource的filter有兼容性问题,可能导致NPE

  • 酌情删除相关filter配置

小讯
上一篇 2025-04-20 14:29
下一篇 2025-06-01 15:10

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/161720.html