我遇到的十二种Mysql连接错误实例

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 本章节分享我遇到的十二种Mysql连接错误实例

作者:手辨






实为吾之愚见,望诸君酌之!闻过则喜,与君共勉!诸君有其他案例烦请留言提供,以帮助更多人!



更新20180205:增加:对ERROR 5 (HY000): Out of memory (Needed 260400 bytes)问题原因进行说明



 


第一节 环境准备


1.1 自建mysql环境主机


主机:iZbp1e*krn92qrx0Z


内网ip: 10.26.254.217


1.2 客户端ecs主机


主机:iZbp1e6*zkrn92qrwzZ


内网ip: 10.24.236.231


1.3  说明


说明:mysql的account的组成为’user’@’host’


第二节  常见问题复现


2.1 ERROR 1045 (28000)



要区分这种错误:ERROR 1142 (42000)  command denied to user 'testcon'@'10.24.236.231' for table/database '**'

这种不是连接问题,这种是已经连上了,出现权限问题导致,错误码也不一样

现象描述:


ERROR 1045 (28000): Access denied for user
'testcon'@'10.24.236.231' (using password: YES)


可能1:password错误


37c9fdaab6b2b671eee895ef90450966ced26c53


f03f3466af6c3103beabf0ef9bd0ddbf1bf79a15


当使用'testcon'@'10.24.236.231'的account错误的password时,登录失败,因为创建了testcon@’%’,


所以account验证可以通过,但是密码不对


可能2:user错误(account错误)


37c9fdaab6b2b671eee895ef90450966ced26c53


b2e5337ed3c5cf37166f0ab4544d626b23ef4808


当使用错误的user时,登录失败,按照之前的account的构成,实际的进行验证的account是: 'testconcon'@'10.24.236.231',


但是并没有创建'testconcon'@'10.24.236.231',而是创建的为testcon@’%’,所以account验证失败,即使使用正确的密


码也无法登录,当创建一个'testconcon'@'%'的时候,使用正确密码则登录正常,如下:


502e0c1f754b995fc5130771b9891e13fc5ef800


cef972b80f17cc5af0bc033a9834ae68429c0115


可能3:account错误


f749283b95edc4402d9e23f2eb6f642048747674


e0787e128eee9ed23684d00754b8625acf75e89c


d15744f6ac724e91b8e0037520a18797479fbce5


与第二种相比,此次创建的账号和密码有如下对应:

Account

Password

testcon@'10.24.236.231'

123

testcon@'1.1.1.1'

12

当使用testcon@'10.24.236.231'以及密码12登录时,登录失败,因为testcon@'10.24.236.231'的


password为123,所以使用password为123可以正常登录


解决办法:


1,如果确认密码正确,检查mysql.user(rds
for mysql分为高权限账号和普通账号管理,高权限账


号的实例可以查询mysql.user_view表)表里面的account信息(主要是user,host列),确认连接的account


符合user里面的匹配项


2,如果通过mysql.user(rds
for mysql分为高权限账号和普通账号管理,高权限账号的实例可以查


询mysql.user_view表)account正常,可以尝试更改一下密码再进行测试



3,最快速简单的方法是重新创建一个账号,授予相关的权限


2.2 ERROR 2005 (HY000)


现象描述:


ERROR 2005 (HY000): Unknown MySQL server
host 'rm-XXXXXXXXXXXX.mysql.rds.aliyuncs.com' (110)


可能1:DNS解析异常


59a8469a7633bcacb29d1f782f8864fc5c61c77b


同ping来获取ip,无法获取到,故mysql命令行进行连接时就出错了,此时需要通过ping来观察dns的解析,


并检查系统dns配置


20170809补充:当使用阿里云的ECS设置的安全组为如下时,会导致dns解析异常:


96fe9c80ee5f57b56cb0a377688237a1c89d4f9d


如下为测试结果:


752eadd4fc035e301bac0982d6ad648fe4ee8b95


2.3 ERROR 1449 (HY000)


现象描述:


ERROR 1449 (HY000): The user specified as a
definer ('testcon'@'10.24.236.231') does not exist


或者


ERROR 1045 (28000): user not exist


可能1:account不存在(阿里云rds高安全模式特有)


af8dc9293b59e1c25271b9bdf2b1d6740f8a3f24


0d9546b0d7a49d4bcf11687e19f3d5b55552b508


解决办法:原因是该account不存在,检查mysql.user(rds for mysql分为高权限账号和普通账号管理,高权限账


号的实例可以查询mysql.user_view表)表里面的account信息(主要是user,host列),确认连接的account


符合user里面的匹配项





当把高安全模式切换到标准模式是,再次进行测试则变成ERROR 1045 (28000): Access denied for user 'contest'@'10.24.236.231'


 (using password: YES),如下:


4d4a632939241bbe3bd61458d7279385327d5d67


18dc5281ca699d64f14b18393bdc9253da495d54 




2.4 ERROR 2003 (HY000)


现象描述:


ERROR 2003 (HY000): Can't connect to MySQL
server on 'test.mysql.rds.aliyuncs.com' (110)


可能1:client侧安全限制,不允许访问


ace865cee84d835533da963fa393bae99a84b2dd


一般表现为telnet特定特定端口不通,解决办法:检查应用所在主机的安全规则是否有拦截


可能2:端口错误


f447ae3a930be14e2e18bcb3e1d5ffe9799beae2


端口错误,即使没有安全限制也无法连接,telnet 特定端口也不会通,解决办法:确认连接mysql的端口是否正确


可能3:mysql服务未正确运行


先关掉自建mysql数据库


8540337152dda839d4cd553c23fbafb7b699645c


然后进行连接


e16e83ab5f246c647911fe60918ff2381decca1f


同样表现为telnet 特定断开不通,解决办法(自建mysql的情况适用,rds不适用如下方法):


1,执行netstat -apn | grep 3306,检查下3306端口的进程信息


2,执行ps -ef | grep mysql,检查下进程信息


3,如果1和2没有输出,可能mysql server未在主机正确运行




可能4:如果是rds  for mysql,且访问模式为标准模式,原因为客户端的ip地址在rds的白名单未配置


f87560fcdb16c8b8e5173493b1a39417f42e8cef


990e9f18594778c02d66580c493956c428f96566


当加上白名单后(等待任务运行完成):


c666c99f4a8f182dbb7892cf5ecb15156c80e50b


cd2d73e37856ed29d86204ef78906a66b3885979


ps:确认自己本地主机的公网出口ip的方式我常用的是使用dms的实例管理-授权访问地址来查看,比较准确,具体如下:


1,用客户端主机访问dms控制台:https://dms.console.aliyun.com/


2,按照如下操作确认公网出口ip


155088e8432dd73dcab5dc2f5e6542591cbbc2c1


219156cdb9fbf9813fe7927a1e90d7c3de6533f3


2.5 ERROR 1135 (HY000)


现象描述:


ERROR 1135 (HY000): Can't create a new
thread (errno 11); if you are not out of available memory, you can consult the


 manual for a possible OS-dependent bug


可能1:limits.conf文件对max user processes做了限制


9dff97f93203e5cb27457642e7d54b6da1540911


2e4cdb90fa8165df74efab6488fd65528a8d2251


5799551cfc02dd5a8f90e7b1341a1a8fa9f70b95


解决办法(自建mysql的情况适用,rds不适用如下方法):


检查和修改系统的内核参数




可能2:mysql没有可用内存


018c3a66648cd99725b95bce85aa11b6296755ce


a153ec0f3ea525008edc2c19e0a24728c9cc6151


 解决办法(先确认内存是否已经不足):增加mysql的内存,如果是rds,可以考虑升级RDS的实例规格



2.6 ERROR 1130 (HY000)


现象描述:


ERROR 1130 (HY000): Host '192.168.1.3' is
not allowed to connect to this MySQL server


可能1:mysql.user表里没有匹配的host名称


be311ec27ec4204fe6fec37908cd7f8080ab6bab


147beaec6ea6d6636a3c35c0ac19dba1802a65a5


从mysql server的mysql.user表里查看user为testcon的host,只有两个:127.0.0.1以及izbp1e6df2sbzkrn92qrwzz,当使用另一个客户端(ip为10.24.236.231,主机名为iZbp1e6df2sbzkrn92qrwzZ)使用user为testcon登录时提示ERROR 1130 (HY000): Host '10.24.236.231' is not allowed to connect to this MySQL server,因为mysql server的mysql.user表里没有ip为10.24.236.231的host,这里要说一点,mysql是把mysql.user里的信息放到内存中排序好之后进行匹配的,先按host排序,host相同排序user(上面的这个问题如果创建一个testcon1@'10.24.236.231'的account,再次连接就会出现ERROR 1045 (28000): Access denied for user 'testcon'@'10.24.236.231' (using password: YES)  因为host匹配到了,user没有,account错误)




解决办法:检查mysql.user(rds for mysql分为高权限账号和普通账号管理,高权限账号的实例可以查询mysql.user_view表)表里面的account信息(主要是user,host列),确认连接的account符合user里面的匹配项


2.7 ERROR 1045 (HY000)


现象描述:


ERROR 1045 (HY000): #28000ip not in
whitelist


可能1:rds for mysql的提示,且访问模式为高安全模式才会出现,原因是ip地址没有在rds的白名单中


a7b237c41c49c41d4f818f8fefbae922e8033dd6


c47622db62b54577e4a586c267b12f2a8c897b00


feb6aca2af711296abe83edaac98555291e9aa2d


当添加白名单后(等待任务运行完成):




bbaf1bc39792ca633cf7bd4d0cd6e71180c90ade




 3a4bde225109cdcea0fde04e145f44a51fbdca44


解决办法:检查RDS的白名单设置是否正确


2.8 ERROR 5 (HY000)


现象描述:


ERROR 5 (HY000): Out of memory (Needed
260400 bytes)


可能1:mysql没有可用内存


018c3a66648cd99725b95bce85aa11b6296755ce


75cbb28d21bfcff8b18637210c7f016f86e42fe2


最近又遇到了这个问题,这个问题出现的原因概括如下(感谢内核同学):


执行sql的时候,mysql server需要申请内存,会先判断当时可用内存是否满足,如果不满足,则直接抛错,不会进行内存申请


解决办法(先确认内存是否已经不足):增加mysql的内存,如果是rds,可以考虑升级RDS的实例规格


2.9 ERROR 1129 (HY000)


现象描述:


ERROR 1129 (HY000): Host '10.24.236.231' is
blocked because of many connection errors; unblock with 'mysqladmin
flush-hosts'


关于max_connect_errors可以参考另一篇:https://yq.aliyun.com/articles/159612?spm=5176.100240.searchblog.8.CZzMGt


可能1:达到了mysql服务器设置的max_connect_errors的值


3c1c1716d03a192dbd022cfd403092e44d81a4b1


4ea50cc2f39c2461a10c55e5fc70348036fa42c6


上面通过3次telnet,然后进行第四次时提示ERROR 1129 (HY000): Host '10.24.236.231' is blocked because of many
connection


 errors; unblock with 'mysqladmin flush-hosts',原因是已经超过了max_connect_errors=3的值,


解决方法(只适用于自己mysql,rds目前不支持):系统命令行下执行mysqladmin
flush-hosts或者mysql命令行里执行flush hosts




ab14441c0acdafbf5c04b1c8db24f9bca787002f


14f3e166c9531737342084f7d2842da8adacefa1


需要注意的是,当进行多次登录失败时,是没有影响的:


53b49f8f5e8bae2ab3352bd0c0a844b82fc3b8bd


 


2.10 ERROR 1226 (42000)


现象描述:


ERROR 1226 (42000): User 'testcon' has
exceeded the 'max_user_connections' resource (current value: 2)


可能1:达到了该account设定的max_user_connections大小


0748484714de85a8424ea0cf31426b4ff7f4e291


5f945fa8466c659d3d4f0b060d70124298b03d4d


当使用grant设定了testcon@’%’的max_user_connections为2时,并发连接超过2就会提示ERROR 1226 (42000): 


User 'testcon' has exceeded the
'max_user_connections' resource (current value: 2),如果没有手动grant指定,会


用系统参数max_user_connections的值来设定,


解决办法:重新grant为0或者调整系统变量max_user_connections,如果没有权限,也可以删除账号重新创建


2.11 ERROR 1226 (42000)


现象描述:


ERROR 1226 (42000): User 'testcon' has
exceeded the 'max_connections_per_hour' resource (current value: 2)


可能1:达到了该account设定的max_connections_per_hour大小


599f003c2e807f7d4c990aed1b63b10c50880086


f2e1dca9d8ee6f0d894b9b5ae0d960048c372ef5


使用testcon一小时内登录2次后就会提示ERROR 1226 (42000): User 'testcon' has exceeded the 


'max_connections_per_hour' resource (current value: 2)


解决办法:重新grant该账号max_connections_per_hour为0,如果没有权限,也可以删除账号重新创建


2.12 ERROR 1040 (HY000)


现象描述:


ERROR 1040 (HY000): Too many connections


可能1:达到了mysql系统参数max_connections的限制


68dfd7bb414c9687c049df9f0debf417c2c663c2


226f3b431ea739043958f8149ab0cbdeceeac8b0


当并发连接大于max_connections的值时,就会出现ERROR 1040 (HY000): Too many connections


解决办法:


1,检查mysql server的CPU,IO,内存等状态的变化,是否有明显的升高现象,如果有明显的升高,实时的通过show processlist获取session信息,通过获取到的session信息分析cpu,io以及内存跑高的原因,综合分析(是否是遇到了阻塞或者慢查询)kill掉相关会话来解决


2,检查mysql server的CPU,IO,内存等状态的变化,是否有明显的升高现象,如果没有明显的升高,实时的通过show processlist获取session信息,通过获取到的session信息找到会话来源(看下是否是sleep连接较多),尝试调整来源主机的应用行为


3,如果无法手动干预,尝试调整mysql的max_connections的值,如果是rds for mysql,需要升级实例规格来提升连接数




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
Prometheus 监控 Cloud Native
使用mysqld_exporter监控所有MySQL实例
使用mysqld_exporter监控所有MySQL实例
33 2
|
10天前
|
SQL 关系型数据库 MySQL
【Go语言专栏】使用Go语言连接MySQL数据库
【4月更文挑战第30天】本文介绍了如何使用Go语言连接和操作MySQL数据库,包括选择`go-sql-driver/mysql`驱动、安装导入、建立连接、执行SQL查询、插入/更新/删除操作、事务处理以及性能优化和最佳实践。通过示例代码,展示了连接数据库、使用连接池、事务管理和性能调优的方法,帮助开发者构建高效、稳定的Web应用。
|
19小时前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
1天前
|
存储 算法 关系型数据库
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
|
9天前
|
SQL 数据可视化 关系型数据库
【MySQL-11】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
【MySQL-11】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
|
10天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks集成实例绑定到同一个vpc下面,也添加了RDS的IP白名单报错:数据源配置有误,请检查,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
26 0
|
11天前
|
关系型数据库 MySQL Java
datagrip连接mysql报错: No appropriate protocol (protocol is disabled or cipher suites are inappropriate
datagrip连接mysql报错: No appropriate protocol (protocol is disabled or cipher suites are inappropriate
|
11天前
|
关系型数据库 MySQL PHP
【PHP 开发专栏】PHP 连接 MySQL 数据库的方法
【4月更文挑战第30天】本文介绍了 PHP 连接 MySQL 的两种主要方法:mysqli 和 PDO 扩展,包括连接、查询和处理结果的基本步骤。还讨论了连接参数设置、常见问题及解决方法,如连接失败、权限和字符集问题。此外,提到了高级技巧如使用连接池和缓存连接信息以优化性能。最后,通过实际案例分析了在用户登录系统和数据管理中的应用。
|
11天前
|
SQL 关系型数据库 MySQL
使用Python的pymysql库连接MySQL,执行CRUD操作
使用Python的pymysql库连接MySQL,执行CRUD操作:安装pymysql,然后连接(host='localhost',user='root',password='yourpassword',database='yourdatabase'),创建游标。查询数据示例:`SELECT * FROM yourtable`;插入数据:`INSERT INTO yourtable...`;更新数据:`UPDATE yourtable SET...`;删除数据:`DELETE FROM yourtable WHERE...`。
25 0
|
11天前
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
29 1