mysql主库用户密码登陆失败从库正常
问题描述:有业务反馈称数据库上的用户有的可以登陆,有的不能登录,是不是集群有问题。怎么会有这么奇怪的问题,是不是最大连接数达到限制了。
环境:keepalived+mysql 5.7.37主从
登录数据库发现连接正常,测试登录,确实存在部分用户可以登录,部分用户登录失败的问题,主库IP以及VIP连接失败,但是从库却可以登录。在数据库上新建一个用户也不影响连接。
VIP连接失败
主库连接失败
从库连接成功
尝试修改用户密码,重新连接,还是同样
mysql> alter user psd_platform@'%' identified with mysql_native_password by 'Longshine#1'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
重建用户 测试连接,还是连接失败。但是新建一个用户在分配同样的权限就没有问题
mysql> drop user psd_platform@'%'; Query OK, 0 rows affected (0.01 sec) mysql> create user psd_platform@'%' identified by 'Longshine#1' with max_user_connections 140; Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on psd_platform.* to psd_platform@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
查看此时的用户状态,显示账号没有锁定
mysql> select * from mysql.user where user='psd_platform'\G *************************** 1. row *************************** Host: % User: psd_platform Select_priv: N Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Reload_priv: N Shutdown_priv: N Process_priv: N File_priv: N Grant_priv: N References_priv: N Index_priv: N Alter_priv: N Show_db_priv: N Super_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Execute_priv: N Repl_slave_priv: N Repl_client_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Create_user_priv: N Event_priv: N Trigger_priv: N Create_tablespace_priv: N ssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0 max_updates: 0 max_connections: 0 max_user_connections: 140 plugin: mysql_native_password authentication_string: *EC5019C6AE0F5C827BEEA4193D621F2076844729 password_expired: N password_last_changed: 2022-07-13 14:56:18 password_lifetime: NULL account_locked: N 1 row in set (0.00 sec)
突然想起来,为什么主库登录和VIP登陆失败,但是备库可以登录成功,因为所有的连接都是通过VIP去连接主库的。有可能这个用户输入被主库拉黑了。之前部署过插件,connection_control_failed_login_attempts插件,密码输入错误延迟登录的插件,当你输入错误超过几次就会延迟你用户的登录。
查看最小的延迟登陆时间达到了半个小时,所以在半个小时之后,该用户自动解锁,但是这种插件方式并不会让用户以account_lock的方式锁定用户,所以在查看mysql.user表的时候,看不出来是否被锁定。
查看相关记录表,连接输错的连接信息 information_schema.connection_control_failed_login_attempts表会记录发起连接的IP信息
有几个用户都存在问题,判断业务端在发起数据库连接的密码没有写对,被插件延迟登陆,最后给插件暂时卸载
mysql> uninstall plugin connection_control; mysql> uninstall plugin connection_control_failed_login_attempts;