MariaDB 10.6 Error 4150:用户因过多凭证错误被封锁求助
排查与解决MariaDB 10.6用户频繁因凭证错误被锁的问题
核心原因分析
max_connect_errors统计的是同一主机来源的失败连接尝试次数,但你用错误密码无法复现问题,说明触发锁定的不是普通密码错误,大概率是以下场景:
- 应用线程的数据库连接配置存在错误:比如连接串里的用户名、密码写错,或是加载了过期凭证,导致每个新线程发起的连接都验证失败,快速耗尽错误次数上限
- 主机解析不稳定:应用服务器的主机名解析结果波动,同一物理机器被识别为不同IP/主机名,每个新解析结果会单独统计错误次数,多来源错误累加触发锁定
- 连接/会话管理异常:主服务的连接池配置不当,频繁创建销毁连接,且部分连接初始化时凭证验证失败
- MariaDB 10.6特定逻辑:该版本的
max_connect_errors统计范围可能包含TLS握手失败、非密码类权限验证失败等场景,不止局限于密码错误
分步排查步骤
实时监控失败连接日志
开启通用查询日志,过滤目标用户的失败请求:SET GLOBAL general_log = 1; SET GLOBAL general_log_file = '/var/log/mysql/general.log';查看日志确认错误类型(密码错误/TLS错误/权限不足),以及请求来源的IP/主机名是否一致。
核对应用连接配置
- 检查主服务和所有线程的数据库连接串:确认用户名、密码、连接地址(IP/主机名)是否正确
- 排查是否存在硬编码过期凭证,或是配置文件加载路径错误(读取了旧配置)
验证主机解析一致性
在应用服务器多次执行nslookup <mariadb-host>,查看返回IP是否稳定;同时在MariaDB中执行:SELECT host, user FROM mysql.user WHERE user = '你的应用账号';确认账号授权的主机范围(如
%、特定IP或主机名),若授权的是主机名但解析不稳定,会导致每次连接被视为不同来源。查看锁定状态与错误统计
执行以下命令获取详细信息:-- 查看目标用户的进程状态 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE USER = '你的应用账号'; -- 查看用户的错误次数配置 SELECT host, user, max_connect_errors FROM mysql.user WHERE user = '你的应用账号'; -- 查看主机缓存中的错误统计 SELECT * FROM performance_schema.host_cache WHERE host = '应用服务器IP';
临时缓解与长期优化
- 临时缓解:先调高
max_connect_errors至合理值(如1000),避免频繁锁定:
修改SET GLOBAL max_connect_errors = 1000;my.cnf(或my.ini)永久生效:max_connect_errors = 1000 - 根本修复:
- 修正所有应用线程的连接配置,确保凭证正确
- 若为解析问题,改用IP地址连接数据库,或在MariaDB中授权应用服务器的所有可能IP
- 优化应用线程与连接池配置,减少不必要的连接创建销毁操作
测试环境无法复现的原因
测试场景单一:你手动用错误密码连接是同一主机的连续失败,而生产环境是多线程、可能多解析来源的分散错误,或是错误类型不同(如TLS握手失败),触发锁定的条件不一致。
内容的提问来源于stack exchange,提问作者rsn
相关产品推荐
相关产品推荐

