当MySQL告诉你Too many connections,就是在传达它的连接池的连接已经满了,你这业务系统不能再和它建立新的连接。ERROR 1040(HY000): Too many connections:DB连接池里已有太多连接,不能再和你建立新连接。
ERROR 1040(HY000): Too many connections:DB连接池里已有太多连接,不能再和你建立新连接。
数据库自己有个连接池,你的每个系统部署在机器时,那台机器上部署的系统实例/服务实例自己也有个连接池,你的系统每个连接Socket都对应DB连接池里的一个Socket连接,这就是TCP连接:
当MySQL告诉你Too many connections,就是在传达它的连接池的连接已经满了,你这业务系统不能再和它建立新的连接。 案例
DB部署在64G内存大机器,而连接这台物理机的Java业务系统部署在2台机器,Java系统的连接池最大大小为200,即每个Java业务系统节点,最多和MySQL建立200个连接,共最多建立400个连接。
但这时若MySQL报异常Too many Connections,说明目前MySQL无法建立400个网络连接。这也太少了吧,这可是高配置机器!
于是检查了my.cnf,有个关键参数是max_connections,即MySQL能建立的最大连接数,设置的800。那为啥两台机器就只需建立400个连接都不行?
登录到MySQL机器,执行如下命令:
Could not increase number of max_open_files to more than mysqld (request: 65535) Changed limits: max_connections: 214 (requested 2000) Changed limits: table_open_cache: 400 (requested 4096)