欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql连接失败的原因(mysql数据库连接失败解决方法)

程序员文章站 2023-11-17 23:03:10
远程连接是输入mysql所在主机的ip和端口来确定主机的逻辑地址,再通过用户和密码来确定登录哪个用户。比如:string url = "jdbc:mysql://192.168.183.134:330...

远程连接是输入mysql所在主机的ip和端口来确定主机的逻辑地址,再通过用户和密码来确定登录哪个用户。比如:

string url = "jdbc:mysql://192.168.183.134:3306/mysql";

就是先在网络层连上ip为192.168.183.134的主机,再去连接这台主机的具体端口3306(传输层),然后传输层达成连接后,在应用层用账号密码登陆,访问mysql数据库

connection conn = drivermanager.getconnection(url, user, password);

一开始我怀疑是否端口设置问题,然后在/etc/mysql/my.cnf上加上了port=3306,结果还是连不上,显示端口拒绝访问。

然后用命令$netstat -apn 找到端口3306的一条信息:

tcp 0 0 127.0.0.1:3306 0.0.0.0:* listen

仔细一看,这里提供的ip是127.0.0.1,结合socket编程的经验,一般要接收任意主机发送的消息时,ip会设置为0.0.0.0,而127.0.0.1(回送地址)是否意味着只能本地访问?然后打开同学的debian查看他的mysql占用端口时,果然如我所想:

tcp 0 0 0.0.0.0:21 0.0.0.0:* listen

经过一番搜索后,得出结论是mysql默认只提供给本地访问,而要开启远程访问功能需要额外设置。从安全的角度看这也是合理的。

设置方法还是修改配置文件/etc/mysql/my.cnf

[client]
default-character-set=utf8

[mysqld]

default-storage-engine=innodb character-set-server=utf8 collation-server=utf8_general_ci port=3306 bind-address=0.0.0.0

utf8相关的是之前本地录入汉字数据时发现插入失败,汉子和varchar不兼容,在mysql模式下输入status查看的状态时:

server characterset: latin1
db characterset: latin1
client characterset: utf8
conn. characterset: utf8

经过这个修改后,前2个字符集就全变成了utf8,支持中文。其他的修改就如同我所说的,绑定ip为0.0.0.0,即接收任意地址的主机的连接,端口绑定3306。

但是依然不能访问,只不过错误信息发生了改变,这次很明确了,是显示用户没有连接权限,也就是说用户只能本地连接,依然搜索资料后得出解决方案如下:

1.新建用户远程连接mysql数据库

mysql> grant all on *.* to team@'%' identified by 'java123' with grant option;
query ok, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
query ok, 0 rows affected (0.00 sec)

2.支持root用户允许远程连接mysql数据库

mysql> grant all on *.* to 'root'@'%' identified by 'cplusplus' with grant option;
query ok, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
query ok, 0 rows affected (0.00 sec)

参考:配置mysql允许远程连接的方法

mysql连接失败的原因(mysql数据库连接失败解决方法)