問題描述:有業務反饋稱數據庫上的用戶有的可以登陸,有的不能登錄,是不是集羣有問題。怎麼會有這麼奇怪的問題,是不是最大連接數達到限制了。
環境: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;