我在一台服务器上创建了两个mysql数据库,一个端口号3306,一个3300,3306连接成功,3300无法连接。1,navicat 两个端口数据库都能连接 2,自己使用jdbc两个端口数据库都能连接 3 测试过程中,发现无论我端口号配置什么数字,只要我密码填写为3306数据库的密码,那就能直接连上3306,这代表端口号配置没有意义?如果我想连接各种非默认端口号数据库我该怎么配置?
原提问者GitHub用户whlq
默认情况下,Druid是支持指定端口号建立数据库连接的。
你可以在数据库URL中指定port参数,指定端口号。例如:
MySQL: jdbc:mysql://ip:port/dbname
Oracle: jdbc:oracle:thin:@host:port:sid
PostgreSQL: jdbc:postgresql://host:port/dbname
SQL Server: jdbc:sqlserver://host:port;databaseName=dbname
也就是说,无论数据库使用的是否为默认端口,Druid都能建立连接。
如果你碰到Druid不能连接非默认端口号数据库的问题,可能的原因有:
数据库连接配置错误,写错了端口号
没有开放数据库非默认端口号
Druid和数据库不在同一网络中,非默认端口号无法访问
Druid版本存在问题,有bug无法建立非默认端口连接
需要做的是:
验证数据库非默认端口号可以正常访问
确认Druid连接URL中正确指定了端口号
检查Druid和数据库是否在同一网络中
尝试升级Druid版本
经过几天排查最后发现是 mysql-connector-java 5.1.9 这个版本依赖包内部的bug,只支持每种类型数据库的默认端口,我修改了版本号,问题解决,与durid无关,希望对遇到这个问题的朋友有用
原回答者GitHub用户whlq
在MySQL中,端口号是用于识别和区分不同的数据库实例的。默认情况下,MySQL使用3306作为端口号。如果您创建了一个使用非默认端口号的数据库实例(如3300),那么连接该数据库需要指定正确的端口号。
根据您的描述,Navicat和自己使用JDBC连接都能成功连接到3300端口的数据库,这说明您已经正确地配置了端口号。那么为什么在测试过程中填写3306端口的密码也能连接上呢?
可能的原因是,在您的服务器上,3300端口与3306端口共享了相同的MySQL进程或者配置文件。这导致当您使用3306端口的密码连接时,实际上是连接到了共享的MySQL进程,而不是您预期的3300端口的数据库实例。
要连接到非默认端口号的数据库实例,无论是使用命令行工具还是其他客户端工具,您都需要在连接字符串中指定正确的端口号。例如,对于使用3300端口的数据库实例,您可以在连接字符串中添加端口号参数,类似于jdbc:mysql://localhost:3300/database_name
。
确保在配置连接时,端口号与要连接的数据库实例的端口号一致,并且没有与其他共享进程或配置冲突。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。