MySQL开放远程权限,竟然连不上?可能是这几个地方没做好

  • 现象描述:

在一次基于公有云ubuntu 24.04的测试环境中,通过内置软件源安装了MySQL应用,配置访问主机名已改为%,但通过公网IP无法连接

  • 原因分析:

公有云的云主机默认是关闭系统防火墙功能的,而且我的安全组默认开放所有端口,这样方便测试。因此,首先这两项已经排除了

下面可以从这几个方面排查问题,包括刷新权限列表、主机绑定、认证插件类型

  1. 未刷新权限表

如果将root的主机名修改为%后,需要刷新权限列表使其生效

  1. 主机绑定

这是遇到的第一个错误,错误10061表示“由于目标计算机积极拒绝,无法连接”。这可能意味着你尝试连接的 MySQL 服务器没有监听指定的端口,或者防火墙阻止了连接请求。

公有云主机防火墙是默认关闭的,因此,不存在防火墙拦截的问题。那么可以从其他原因排查

10061错误

查看[mysqld]配置中是否存在bind-address = 127.0.0.1,该配置会限制MySQL客户端只能在本机访问,可以注释掉,或者修改为0.0.0.0

修改完成记得重启MySQL服务

  1. 密码认证插件类型

配置文件修改了,此时再次尝试连接MySQL,提示错误号码1698,这个就是密码认证插件的问题了

错误号码1698

查看认证插件类型

可以看到,此时root用户的认证类型为auto_socket,并不是默认的mysql_native_password

小贴士:

auth_socket 是一个插件,通常用于 MySQL 数据库服务器中。它允许客户端通过操作系统本身的认证机制来连接到 MySQL 服务器,而不需要在 MySQL 中单独设置密码。这意味着,如果操作系统的用户账户与 MySQL 用户账户相匹配,并且该用户具有使用 auth_socket 插件的权限,那么该用户就可以直接登录到 MySQL 而无需输入密码。

—————– 我是一条分割线

这个功能一般用于一些需要自动化的场景中,比如脚本或服务需要定期连接到数据库执行任务,而避免了硬编码数据库凭证的风险。此外,这也提高了安全性,因为减少了因密码泄露而导致的安全风险。

修改密码插件认证类型

执行修改命令

这是修改后的结果

经过以上操作,问题终于解决了。主要的原因是主机绑定密码认证插件类型的问题

  1. 反向域名解析(只是警告)

这个可以在MySQL的错误日志当中查看到,路径为/var/log/mysql/error.log

出现错误的原因是MYSQL Server在本地内存中维护了一个非本地的Client TCP cache,这个cache中包含了远程Client的登录信息,比如IP地址,hostname等信息。如果Client连接到服务器后,Mysql首先会在本地TCP池中根据IP地址解析客户端的hostname或者反向解析,如果解析不到,就会去DNS中进行解析,如果还是解析失败就是在error log中写入这样的警告信息。

严格来说,这不算是一个错误,只是警告,服务端也能够正常连接。但建议禁用掉,毕竟远程访问多了,会消耗一部分服务端性能,这也算是一种优化措施

解决办法:

在配置文件[mysqld]块中添加如下参数

修改完成,记得重启MySQL服务

MySQL数据库安装失败后的补救措施

MySQL安装过程中,莫名其妙无法继续安装,通常是因为你的电脑名含有中文,或者你以前安装过,没有卸载完整,导致后续的安装失败。解决问题的办法如下:

问题1 中文名导致的错误

设备名称是否含有中文

如图 第4步所示,重命名这台电脑。我的电脑是win10,Win11类似操作。记得重启电脑。

如果是以前安装过,后续安装需要卸载以前的数据,重新配置,重点关注4个地方。

1 卸载程序

控制面板,程序卸载,找到所有以MySQL开头的程序,全部删除

2 Program Files(×86)

找到里面的MySQL文件夹,删除

3 Program Files

同样是找到里面的MySQL文件夹,删除

4 删除Program Data下面的MySQL文件夹

此处是隐藏文件夹,需要先勾选隐藏的项目,才能看到Program Data文件夹。

在ProgramData下面找到MySQL文件夹,删除。

注意,不是要删除ProgramData,而是要删除目录里面的MySQL文件夹。

记住4个要删除的都是跟MySQL相关。

最后一步就是要重启电脑,再重新安装MySQL。

安装包下载

(1)MySQL :: Download MySQL Community Server

https://dev.mysql.com/downloads/mysql/

(2)选择社区版(免费),下载MSI包

选择 8.0.37版本,跳转到下载页面

选择msi版本 8.0.37 共296.1M 点 download下载

也可以直接复制下面的链接,下载

https://dev.mysql.com/downloads/file/?id=528489

MySQL连接数导致的不能正常连接数据库解决方案

报错提示:

Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’;

连接错误次数超过mysql数据库max_connection_errors的最大值中断了数据库连接而导致的阻塞,不能连接数据库;

解决方法:

1. 进入mysql安装目录/usr/local/mysql/bin,根据自己实际安装目录,执行该命令

[root@localhost bin]# ./mysqladmin -u root -h 自己mysql的主机IP -p flush-hosts

2. 进入mysql交互环境,必须root账户进入,执行flush hosts;

当某个客户端因为频繁尝试连接 MySQL 服务器失败,导致其主机被服务器列入临时封禁名单时,执行 FLUSH HOSTS 可以清理这个缓存。MySQL 会出于安全考量,限制短时间内频繁出现连接错误的主机访问,以防止恶意攻击,例如暴力破解密码的行为。正常的客户端如果遭遇误判,管理员就可以用这条命令来恢复其连接权限。

3. 更改连接数,vim /etc/my.cnf

总结:

连接错误次数超过mysql数据库max_connection_errors的最大值中断了数据库连接而导致的阻塞,不能正常连接数据库;建议连接次数高些,然后执行flush hosts; 刷新主机缓存。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。