【问题标题】:Terminate MySQL connections on shared host?终止共享主机上的 MySQL 连接?
【发布时间】:2010-09-09 07:25:19
【问题描述】:

我正在使用 MediaTemple 的网格服务器(共享/网格托管)来运行我正在编写的一些 MySQL/PHP 站点,并注意到我没有关闭我的一个 MySQL 连接,这导致我的站点出错:

"Too Many Connections"

我无法在任何地方登录以手动关闭连接。

是否可以使用脚本或其他类型的命令关闭打开的连接?

我应该等吗?

【问题讨论】:

    标签: sql mysql database connection


    【解决方案1】:

    如果您根本无法登录 MySQL,您可能必须联系您的托管服务提供商以终止连接。

    如果可以使用 MySQL shell,可以使用show processlist 命令查看连接,然后使用kill 命令删除连接。

    不幸的是,根据我的经验,挂起的 SQL 连接往往会保持这种状态。

    【讨论】:

      【解决方案2】:

      确保您正在关闭与您的 PHP 代码的连接。此外,您可以增加 /etc/my.cnf 中允许的最大连接数。

      max_connections=500
      

      最后,您可以登录到 mysql 提示符并输入 show statusshow processlist 以查看服务器的各种统计信息。

      如果一切都失败了,重新启动服务器守护程序应该会清除持久连接。

      【讨论】:

        【解决方案3】:

        好吧,如果你永远不能通过连接潜入,我不知道',但如果你偶尔可以潜入,在 Ruby 中它会接近:

        require 'mysql'
        
        mysql = Mysql.new(ip, user, pass)
        processlist = mysql.query("show full processlist")
        killed = 0
        processlist.each { | process |
          mysql.query("KILL #{process[0].to_i}")
        } 
        puts "#{Time.new} -- killed: #{killed} connections"
        

        【讨论】:

          【解决方案4】:

          如果您可以以足够的权限访问命令行,请重新启动 MySQL 服务器或 Apache(假设您使用 Apache)服务器 - 因为它可能会保持连接打开。成功关闭连接后,请确保您没有使用 PHP 的持久连接(一般认为它不会产生任何显着的性能提升,但它有各种各样的问题 - 就像你经历过的那样 -在某些情况下——比如使用 PostgreSQL——它甚至会显着降低您的网站速度!)。

          【讨论】:

            【解决方案5】:

            盲目地进入终止连接不是解决这个问题的方法。首先,您需要了解连接不足的原因。您的 max_connections 设置是否选择正确匹配最大/预期用户的数量?当你真的不需要它们时,你是否在使用持久连接?等等

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-05-17
              • 2017-05-22
              • 1970-01-01
              • 1970-01-01
              • 2020-11-14
              • 1970-01-01
              • 1970-01-01
              • 2020-11-27
              相关资源
              最近更新 更多