首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql常见连接失败问题汇总

案例1 端口不通/进程没有启动

错误信息:

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.101.31' (111)

此报错为, 目标mysql的端口不通,比如防火墙或者selinux限制了, 或者没有启动mysqld进程.

13:36:36 [root@ddcw21 ~]#perror 111 OS error code 111: Connection refused

解决方法

确保目标Mysqld已启动. 确保目标端口能通(关闭防火墙和selinux). 如果要经过其它网络设备, 也需要添加相应的规则.

案例2 网络不通

报错信息如下:

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.101.33' (113)

这个报错和上面的类似,此报错为路由不通, 即没有到达目标IP的路由

13:36:16 [root@ddcw21 ~]#perror 113 OS error code 113: No route to host

解决方法如下:

确保IP地址正确. 确保路由配置正确(非直连请配置静态路由或者网关)

案例3 密码过期

登录mysql后,无法执行sql, 报错如下

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement

此报错为用户密码过期.

解决方法

修改密码即可

ALTER USER 'u2023_2'@'%' IDENTIFIED BY '123456';

-- ALTER USER current_user() IDENTIFIED BY '123456'; -- 修改当前用户的密码案例4 密码不对

报错信息如下:

ERROR 1045 (28000): Access denied for user 'u2023_2'@'192.168.101.21' (using password: YES)

此报错为密码不对.

解决方法

使用正确的密码即可. 若忘记密码,可直接修改密码.

ALTER USER 'u2023_2'@'%' IDENTIFIED BY '123456'; -- 修改密码案例5 密码加密插件不匹配

报错类似如下:

FATAL: error 2059: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

或者如下错误信息

Caused by: java.io.IOException: caching_sha2_password Auth failed

at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.negotiate(MysqlConnector.java:257)

at com.alibaba.otter.canal.parse.driver.mysql.MysqlConnector.connect(MysqlConnector.java:80)

... 4 more

该类报错均为客户端使用的密码加密策略和server端保存的加密密码所使用的插件不同导致的.

通常为server使用的caching_sha2_password, 而客户端不支持该密码加密插件.

常见于java等比较稳(老)的应用, python等通常都实现了caching_sha2_password加密方式

解决办法

1. 更换server端用户的密码加密方式为mysql_native_password

由于mysql 不会保存原密码, 所以密码修改密码加密插件的时候必须修改密码

alter user 'u1'@'%' identified with mysql_native_password by 'Ygs123456.';

也可以修改默认的密码加密插件(需要重启)

default-authentication-plugin=mysql_native_password

2. 更新客户端/应用程序驱动包

案例6 无目标数据库的权限

错误信息

ERROR 1044 (42000): Access denied for user 'u2023_3'@'%' to database 'db2'

该报错为u2023_3用户无db2数据库的权限

解决办法

授予该用户目标数据库的权限即可

grant all on db2.* to 'u2023_3'@'%';案例7 连接错误次数过多

错误信息如下:

ERROR 1129 (HY000): Host 'host' is blocked because of many connection errors

若 未设置skip-name-resolve, 则不会产生本错误。该报错为连接错误次数过多,MySQL暂时封锁了该主机

解决办法

在服务器上执行’FLUSH HOSTS;'命令或者重启MySQL服务

FLUSH HOSTS;案例8 连接太多

错误信息如下:

ERROR 1040 (HY000): Too many connections

该报错为当前的连接数量 已经超过了@@max_connections+1

mysql会保留一个连接用来管理数据库, 但这个连接也是可以被使用的. 所以实际的最大连接数为@@max_connections+1

解决办法

如果可以在应用侧释放连接最好, 但往往不行. 这时就需要增大数据库的连接数了, 但又连不上去

1. 使用gdb修改mysqld进程参数

gdb -p `pidof mysqld` --batch --ex 'print max_connections' --ex 'set max_connections = 102400' #尽可能小的阻塞

该命令在shell环境执行, 作用是gdb临时接管mysqld进程并设置max_connections = 102400然后退出gdb.

修改完后就可以登录数据库了. 如有必要, 还需要修改配置文件相应的参数

2. 重启数据库

重启数据库也是会释放连接的. 但是影响较大.酌情考虑.

总结:

mysql的报错提示都是很明显的, 认真看提示, 麻烦点的就是命令行客户端 会识别一些变量和自动读取一些默认的配置文件. 所以有必要的话, 可以加个--no-defaults

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OKnbihsndGBLkE1zfDuhLKKQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券