• 解决mysql获取不到连接的问题


      应用使用mysql的过程中。提示获取不到数据库连接。

      例如:

    Connections could not be acquired from the underlying database!
    Cannot obtain a new connection
    ...

      通过命令:

    show status where Variable_name = 'Connections'

      查看mysql当前的连接,发现用得差不多了。

      在研发环境,很多台机器使用一个数据库的情况,或者网络不稳定的情况, 这种问题尤其明显。

      原因

    • mysql的connection是有限的。默认connection数量只有1024。
    • 一般现在的应用都使用连接池管理数据库连接。甚至会用到读写分离,分库分表。导致一个应用启动就使用100来个数据库链接了。
    • 如果网络抖动等原因,应用到mysql的链接被断开了。应用会向mysql重新申请connection。然后之前的connection应用已经不再管了, 但是mysql会等待一个较长的时间,才释放已经不再使用的connection。
     
     
      解决connection不足问题
     
      重启mysql
      这不是一个好办法,研发测试环境可以这样子玩玩, 生产环境肯定是不可以这样子的。
     
      最大连接数调大
      mysql默认的连接数只有1024。把连接数调大, 可以很有效的缓解这个问题。在mysql的主要配置文件my.cnf中, 找到并且修改:
    max_connections        = 2048

      执行后重启mysql。

     
      等待时间调小
      上面说到,mysql会等待一段时间,才释放已经无用的connection的。我们可以调小这值。
     
      先执行命令, 查看一下等待时间:
    show variables like "%timeout%"

    下图所示:

      默认是28800秒,8小时。。。我们把这2个值调小即可。在mysql命令行中输入(或者navicate等工具都可以):

    set global wait_timeout=60;
    set global interactive_timeout=60;

      如果在navicate中执行上述命令, 需要关闭当前数据库连接,才看到生效的。

     
     
      生产环境完善监控  
      为了避免线上出现这种问题, 对mysql监控要加上当前连接数这个项,超过一定阀值就要告警。
     
     
      参考
    http://stackoverflow.com/questions/4284194/terminating-idle-mysql-connections
    http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout
    http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_interactive_timeout
  • 相关阅读:
    Vue路由机制
    谷歌浏览器打不开应用商店的解决方法
    Vue报错——Component template should contain exactly one root element. If you are using vif on multiple elements, use velseif to chain them instead.
    Vue.js学习之——安装
    Vue使用axios无法读取data的解决办法
    关于localstorage存储JSON对象的问题
    2013年整体计划
    个人喜欢的警语收集
    Linux防火墙的关闭和开启
    Flex修改title 转载
  • 原文地址:https://www.cnblogs.com/ELMND/p/4554248.html
Copyright © 2020-2023  润新知