Mysql Too many connets紧急处理

Part1环境信息

1.1、数据库版本

[mysql ~]$ mysql --version
mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)

1.2、数据库参数

mysql> show global variables like '%connections';

+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| max_connections        | 500   |
| max_user_connections   | 0     |
| mysqlx_max_connections | 100   |
+------------------------+-------+

Part2问题处理

2.1、gdb紧急处理

查询数据库进程信息

[root ~]# ps -ef| grep mysqld

mysql     5929     1  0 Apr03 ?        00:29:32 /mysql/app/mysql8.0.36/bin/mysqld --defaults-file=/mysql/conf/my3306.cnf

也可以这样查

[root ~]# find / -name  "*.pid"
/mysql/data/mysql3306/data/node1.pid

[root ~]# cat /mysql/data/mysql3306/data/node1.pid
5929

修改的两种方式

[mysql ~]$ gdb -p 5929 -ex "set max_connections=1000" -batch

[mysql ~]$ gdb -p $(cat /mysql/data/mysql3306/data/node1.pid) -ex "set max_connections=1000" -batch

发现了一些报错,但是不影响登录

Dwarf Error: wrong version in compilation unit header (is 0, should be 2, 3, or 4) [in module /mysql/app/mysql8.0.36/bin/mysqld]

Dwarf Error: wrong version in compilation unit header (is 0, should be 2, 3, or 4) [in module /mysql/app/mysql8.0.36/lib/plugin/component_reference_cache.so]

Dwarf Error: wrong version in compilation unit header (is 0, should be 2, 3, or 4) [in module /mysql/app/mysql8.0.36/lib/plugin/group_replication.so]

Dwarf Error: wrong version in compilation unit header (is 0, should be 2, 3, or 4) [in module /mysql/app/mysql8.0.36/lib/plugin/mysql_clone.so]

查询修改后的数据库参数

mysql> show global variables like '%connections';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| max_connections        | 1000  |
| max_user_connections   | 0     |
| mysqlx_max_connections | 100   |
+------------------------+-------+
3 rows in set (0.01 sec)

2.2、数据库紧急处理

查看数据库连接参数

mysql> show global variables like 'max_connections';

+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 3     |
+-----------------+-------+
1 row in set (0.01 sec)

显示连接具体信息

mysql> show full processlist;
+----+-----------------+-----------+------+---------+--------+------------------------+-----------------------+
| Id | User            | Host      | db   | Command | Time   | State                  | Info                  |
+----+-----------------+-----------+------+---------+--------+------------------------+-----------------------+
|  7 | event_scheduler | localhost | NULL | Daemon  | 426103 | Waiting on empty queue | NULL                  |
| 19 | root            | localhost | NULL | Query   |      0 | init                   | show full processlist |
| 26 | test            | localhost | NULL | Sleep   |    211 |                        | NULL                  |
| 29 | test            | localhost | NULL | Sleep   |     67 |                        | NULL                  |
+----+-----------------+-----------+------+---------+--------+------------------------+-----------------------+
4 rows in set, 1 warning (0.00 sec)

显示连接数

mysql> show global status like 'threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 3     |
+-------------------+-------+
1 row in set (0.01 sec)

链接失败,连接数过多

[mysql ~]$ mysql -utest -p'test'  -P 3306 -S /mysql/data/mysql3306/socket/mysql.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1040 (HY000): Too many connections

赋予SERVICE_CONNECTION_ADMIN权限

mysql> grant service_connection_admin on *.* to test@'%';
Query OK, 0 rows affected (0.04 sec)

连接成功

[mysql ~]$ mysql -utest -p'test'  -P 3306 -S /mysql/data/mysql3306/socket/mysql.sock

mysql> 

查看具体的链接信息

mysql> show full processlist;
+----+-----------------+-----------+------+---------+--------+------------------------+-----------------------+
| Id | User            | Host      | db   | Command | Time   | State                  | Info                  |
+----+-----------------+-----------+------+---------+--------+------------------------+-----------------------+
|  7 | event_scheduler | localhost | NULL | Daemon  | 427989 | Waiting on empty queue | NULL                  |
| 19 | root            | localhost | NULL | Query   |      0 | init                   | show full processlist |
| 26 | test            | localhost | NULL | Sleep   |   2097 |                        | NULL                  |
| 29 | test            | localhost | NULL | Sleep   |   1953 |                        | NULL                  |
| 35 | test            | localhost | NULL | Sleep   |    958 |                        | NULL                  |
+----+-----------------+-----------+------+---------+--------+------------------------+-----------------------+
5 rows in set, 1 warning (0.00 sec)

连接线程数

mysql> show global status like 'threads_connected';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_connected | 4     |
+-------------------+-------+
1 row in set (0.00 sec)

查看test的权限

mysql> show grants for test@'%';
+-----------------------------------------------------+
| Grants for test@%                                   |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO `test`@`%`                    |
| GRANT SERVICE_CONNECTION_ADMIN ON *.* TO `test`@`%` |
| GRANT ALL PRIVILEGES ON `test`.* TO `test`@`%`      |
+-----------------------------------------------------+
3 rows in set (0.00 sec)

可以看到root也有SERVICE_CONNECTION_ADMIN权限

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`%` WITH GRANT OPTION |


| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FIREWALL_EXEMPT,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SENSITIVE_VARIABLES_OBSERVER,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,TELEMETRY_LOG_ADMIN,XA_RECOVER_ADMIN ON *.* TO `root`@`%` WITH GRANT OPTION |

2.3、查杀会话

确定哪个用户连接最多

mysql> select user,count(*) from performance_schema.processlist group by user;

查看该用户执行最多的语句

mysql>  select * from performance_schema.processlist where USER ='用户' order by INFO;

查看锁语句并把该sql干掉

select * from sys.innodb_lock_waits\G

sql_kill_blocking_connection这行

Part3思路复盘

1、gdb不方便在生产上操作,可能会有后患,但是情急之下没有办法 2、当时生产库,我用root登录也报连接数过多,说明有人或者有业务也使用了root用户,导致我没办法登录,只能重启数据库,导致费时费力。要定期检查谁用了root用户,一定要控制使用的用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值