首页 > 数据库 >远程连接 Mysql 失败的解决方法

远程连接 Mysql 失败的解决方法

时间:2023-11-10 10:01:23浏览次数:28  
标签:utf8 0.0 Mysql 端口 远程 mysql 3306 连接

今天在虚拟机Ubuntu上折腾了一晚上mysql,然后试着用java连接,搞了很久都没成功,但是同学配好的Debian上却连接成功了,也就是说我的配置有问题。

折腾了很久,最后还是通过理解异常信息来大致猜测。

远程连接是输入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 失败的解决方法

标签:utf8,0.0,Mysql,端口,远程,mysql,3306,连接
From: https://www.cnblogs.com/roccn/p/17823447.html

相关文章

  • 线上SQL超时场景分析-MySQL超时之间隙锁
    前言之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下。背景说明分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案消息表名:mq_messages数据量:3000多万索引:create_time和statusstatus:有两个值,1和2,其中99%以上的状态都是2,表......
  • mysql产生临时表的原因有哪些?
    mysql产生临时表的原因有哪些?排序操作:如果查询语句中包含了ORDERBY子句,MySQL就会使用临时表来存储排序结果。分组操作:如果查询语句中包含了GROUPBY子句,MySQL就会使用临时表来存储分组结果。连接操作:如果查询语句中包含了JOIN子句,MySQL可能会使用临时表来存储连接结果。子查......
  • 常见诊断网络连接是否正确的命令
    背景经常我们需要确认我们使用的主机与目标主机是否连通,若不连通的话,其中在哪里断开测试是否连通:pingip,可选参数-n(定义发送数据包的个数),-t(不间断向目标地址发送数据包,直到我们强迫其停止),-l(设置数据包的大小,一般默认32字节)测试连通路径上有哪些ip:windows使用命令tracert......
  • 常用mysql命令记录
    显示当前数据库列表:SHOWDATABASES;创建新数据库:CREATEDATABASEdatabase_name;这将创建一个名为“database_name”的新数据库。切换到指定数据库:USEdatabase_name;这会将当前会话切换到“database_name”数据库。显示当前数据库中的表:SHOWTABLES;创建表:CREATETABLEtable_......
  • Mysql问题
    按照黑马安装mysql,调用cmd,输入mysql,回车之后跟教程上显示的不一样:我显示的是:mysql8.0ERROR1045(28000):Accessdeniedforuser‘ODBC‘@‘localhost‘(usingpassword:NO) 解决方法在:终极解决mysql8.0ERROR1045(28000):Accessdeniedforuser‘ODBC‘@‘l......
  • 表连接和截取字段函数
    selecte.ename,d.dnamefromempeleftjoindeptdone.DEPTNO=d.DEPTNOwheresubstr(e.ename,2,1)='M'; 函数之前需要干干净净,图中 表.函数不符合语法报错了  ......
  • linux 安装mysql
    linux安装mysql数据库的教程1.安装数据库1)yum-yinstallmysql-server(简单)yum命令自动从网上寻找mysql服务资源,下载至本地并完成安装2)也可以自己在网上下载mysql服务,通过xftp传输至Linux系统,自己安装(一般安装在usr或opt目录下)2.启动数据库安装完毕,执行命令servicemys......
  • mysql 找空数据 必须 is null
      ......
  • MySQL 数据库表格创建、数据插入及获取插入的 ID:Python 教程
    创建表格要在MySQL中创建表格,请使用"CREATETABLE"语句。确保在创建连接时定义了数据库的名称。示例创建一个名为"customers"的表格:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword&qu......
  • MYSQL的安装
    1.下载安装包https://www.mysql.com/downloads/2.双击打开3.点击custom4.选择过滤项,64位的机器选择64位的5.选择只安装服务6.点击execute执行7.会有一个需要安装c++的窗,点击统一就行,然后点击next8.继续执行9.等执行完10.点击next11.再点击next12.默认next13.网络通信默认,next14.......