打赏

mysql 连接数太多

【问题记录】:
MySQL: ERROR 1040: Too many connections

【解决办法】:
1.查看mysql的最大连接数:

mysql> show variables like '%max_connections%'; //500

2.查看服务器响应的最大连接数:

mysql> show global status like 'Max_used_connections'; //501

3.设置这个最大连接数值:

// 方法一:
mysql> set GLOBAL max_connections=256;

//方法二:永久更改
vi /etc/my.cnf
max_connections = 512

//方法三:非使用mysqld脚本自动启动的用户。
修改$MYSQL_HOME/bin/mysqld_safe文件
例如:/usr/local/mysql/bin/mysqld_safe这个文件
grep -n ‘max_connection’ $MYSQL_HOME/bin/mysqld_safe
修改对应行号的max_connections参数值

说明:

对于mysql服务器最大连接数值的设置范围比较理想的是:
服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上,如果在10%以下,说明mysql服务器最大连接上限值设置过高。

设置最大max_connections值没有硬性限制。因此,您必须根据工作量,与MySQL服务器的同时连接数等来明智地选择max_connections。通常,建议不要将max_connections值设置得太高,因为在某些锁定条件下或如果所有这些连接都运行得很大,则会降低速度竞争问题可能会出现。

在使用临时/内存表进行活动连接的情况下,内存使用率可能会更高。在具有较小RAM或在应用程序端具有大量连接控制的系统上,我们可以使用较小的max_connections值,例如100-300。具有16G RAM或更高的max_connections = 1000的系统是个好主意,每个连接缓冲区应具有良好/默认值,而在某些系统上,我们可以看到最多8k个最大连接,但是在负载峰值的情况下,此类系统通常会崩溃。

4.服务器等待时间

mysql> show global variables like 'wait_timeout';  //28800

5.设置等待时间

mysql> set global wait_timeout=10;

6.所有连接到这个服务器上的MySQL连接

mysql> show processlist;    

7.杀掉进程

mysql> kill 1180421;

8.查看当前数据库的所有用户:

select user,host,password from mysql.user;

9.业务代码处理GORM-psql

// 关闭链接
db.DB().Close()

// 全局共享链接的话,设置一个最大打开链接数
db.DB().SetMaxOpenConns(10) 

// 打开DB
db, err = gorm.Open("postgres", connCfg)

// 设置最大连接数
db.DB().SetConnMaxLifetime(5 * time.Second)
db.DB().SetMaxOpenConns(10)
db.DB().SetMaxIdleConns(10)

相关链接

https://www.percona.com/blog/2013/11/28/mysql-error-too-many-connections/
https://blog.51cto.com/tiany/1725955
https://dev.mysql.com/doc/refman/8.0/en/too-many-connections.html

posted @ 2020-05-14 13:49  苍山落暮  阅读(588)  评论(0编辑  收藏  举报