MySQL开放远程权限,竟然连不上?可能是这几个地方没做好
- 现象描述:
在一次基于公有云ubuntu 24.04的测试环境中,通过内置软件源安装了MySQL应用,配置访问主机名已改为%,但通过公网IP无法连接
- 原因分析:
公有云的云主机默认是关闭系统防火墙功能的,而且我的安全组默认开放所有端口,这样方便测试。因此,首先这两项已经排除了
下面可以从这几个方面排查问题,包括刷新权限列表、主机绑定、认证插件类型
- 未刷新权限表
如果将root的主机名修改为%后,需要刷新权限列表使其生效
- 主机绑定
这是遇到的第一个错误,错误10061表示“由于目标计算机积极拒绝,无法连接”。这可能意味着你尝试连接的 MySQL 服务器没有监听指定的端口,或者防火墙阻止了连接请求。
公有云主机防火墙是默认关闭的,因此,不存在防火墙拦截的问题。那么可以从其他原因排查
10061错误
查看[mysqld]配置中是否存在bind-address = 127.0.0.1,该配置会限制MySQL客户端只能在本机访问,可以注释掉,或者修改为0.0.0.0
修改完成记得重启MySQL服务
- 密码认证插件类型
配置文件修改了,此时再次尝试连接MySQL,提示错误号码1698,这个就是密码认证插件的问题了
错误号码1698
查看认证插件类型
可以看到,此时root用户的认证类型为auto_socket,并不是默认的mysql_native_password
小贴士:
auth_socket 是一个插件,通常用于 MySQL 数据库服务器中。它允许客户端通过操作系统本身的认证机制来连接到 MySQL 服务器,而不需要在 MySQL 中单独设置密码。这意味着,如果操作系统的用户账户与 MySQL 用户账户相匹配,并且该用户具有使用 auth_socket 插件的权限,那么该用户就可以直接登录到 MySQL 而无需输入密码。
—————– 我是一条分割线
这个功能一般用于一些需要自动化的场景中,比如脚本或服务需要定期连接到数据库执行任务,而避免了硬编码数据库凭证的风险。此外,这也提高了安全性,因为减少了因密码泄露而导致的安全风险。
修改密码插件认证类型
执行修改命令
这是修改后的结果
经过以上操作,问题终于解决了。主要的原因是主机绑定和密码认证插件类型的问题
- 反向域名解析(只是警告)
这个可以在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
文章为作者独立观点不代本网立场,未经允许不得转载。