【问题记录】:
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)
【励志篇】: 古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。