discard long time none received connection
maven 引入
com.alibaba
druid-spring-boot-starter
${alibaba-druid.version}
详细介绍一下 druid password 的加解密
Druid 提供了对数据库连接密码的加密和解密功能,以提高安全性,防止数据库密码在配置文件中以明文形式暴露。
这种加密方式是通过 Druid 的内置功能实现的。
一、加密密码
Druid 使用 DruidPasswordCallback
进行密码的加密和解密。加密密码的步骤如下:
-
生成密钥文件
首先,你需要生成一个用于加密和解密的密钥文件。这个文件会用来加密数据库密码。
java -cp druid-x.x.x.jar com.alibaba.druid.filter.config.ConfigTools
运行上述命令后,输出结果会包括三个部分:
- privateKey: 私钥
- publicKey: 公钥
- password: 加密后的密码
例如:
privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMl1ryLz9ZfLbUI... publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL9sBkwHY... password: Dv7cWQk1jVc7K/zNFFN2asU5Cn...
-
保存公钥和加密密码
- 将公钥保存到一个文件中,比如
publicKey.txt
。 - 在配置文件中使用加密后的密码。
- 将公钥保存到一个文件中,比如
机器在定时跑批执行大量 SQL 时,发现系统触发大量的 FULL-GC。
配置信息
应用中配置了的 druid 大概如下:
-->
-->
实时链路,同时支持多个 oracle/mysql 的数据源配置
然后,发现 oracle dump 大量的内存数据信息,导致频繁的 GC。
怀疑可能1-PreparedStatementCache
说明
怀疑是 jdbc 的 PreparedStatementCache,导致的缓存占用过多的内存。
修改方式
禁用 psCache
将 druid 的 psCache 禁用
DruidDataSource dataSource = new DruidDataSource();
// 是否启用池化 ps
dataSource.setPoolPreparedStatements(false);
实时链路,同时支持多个 oracle/mysql 的数据源配置
然后,发现 oracle dump 大量的内存数据信息,导致频繁的 GC。
其中占比比较大的一个对象就是 oracle.jdbc.driver.BufferCache
个人解决方式
-
移除 fetchSize 设置
-
druid 添加连接属性
oracle.jdbc.maxCachedBufferSize=1048576
1MB 的缓存大小。
效果
有一个数据库的 SQL 执行引擎系统。
涉及到的数据库源较多,定时执行以下 SQL,有些 SQL 一分钟左右执行一次。
近期,发现 oracle 数据库备库切换 ip 的时候,已经切换完成了,但是系统还是长时间会出现异常。
且有多台机器存在这个问题,重启后问题解决。
排查过程
首先下流量, jstack 获取堆栈信息,然后服务重启。
发现堆栈日志在 getConnection 时等待,同时观察 CAT 发现等待了 20 分钟才释放资源。
初步猜测,原因是 getConnection 超时时间过长。
以前工作学习中,一直被告诫不要使用外键,所以也没有仔细整理过。
这里记录一下笔记。
外键
是什么?
MySQL 的外键(Foreign Key)是一种关系型数据库中用于建立表与表之间关联关系的重要工具。
外键定义了两个表之间的引用关系,它连接了两个表,使它们之间建立起一定的联系。
外键用于维护表与表之间的一致性和完整性,确保数据的准确性和可靠性。
如何定义
在创建表时,可以使用 FOREIGN KEY
关键字来定义外键。外键通常与 REFERENCES
关键字一起使用,用于指定引用的表和列。
对数据进行统一的管理处理,后续方便使用。
基本信息
见上一篇的处理。
select * from information_schema.KEY_COLUMN_USAGE where REFERENCED_TABLE_SCHEMA = 'test' \G;
*************************** 1. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: test
CONSTRAINT_NAME: user_extra_ibfk_1
TABLE_CATALOG: def
TABLE_SCHEMA: test
TABLE_NAME: user_extra
COLUMN_NAME: user_id
ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: 1
REFERENCED_TABLE_SCHEMA: test
REFERENCED_TABLE_NAME: users
REFERENCED_COLUMN_NAME: id
1 row in set (0.06 sec)