zoukankan      html  css  js  c++  java
  • 30.Mysql连接数管理

    MySQL 连接数管理

    以下文章来源于MySQL技术 ,作者MySQL技术

     
    MySQL技术

    分享MySQL运维经验 对云计算与大数据稍有涉猎

    前言:

    MySQL 连接状态是数据库中比较重要的一个指标,比如说目前总共有多少个连接、各连接处于什么状态等等,这些连接状态也能从侧面反映出数据库当前运行状况。本篇文章我们一起来学习下 MySQL 连接相关内容。

    1.connection相关参数

    先来看下 connection 相关参数,只有参数设置合理了,数据库才能跑得更好。

    • max_connections:最大连接数,默认为 151 ,可动态修改。

    • max_connect_errors:当同一个客户端连接出错的次数达到 max_connect_errors 时,服务器将阻止该主机进行再次连接。默认为 100 ,可动态修改。

    • max_user_connections:对于单个数据库用户允许的最大同时连接数。默认为 0 ,即表示无限制,可动态修改。

    • connect_timeout:等待一个连接响应的时间,默认为 10s ,在获取连接阶段起作用,可动态修改。

    以 max_connections 参数为例,来看下具体参数如何查看及修改:

    # 查看相关参数
    mysql> show variables like 'max_connections';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | max_connections | 151   |
    +-----------------+-------+

    # 修改参数 (my.cnf配置文件中也要修改)
    mysql> set global max_connections = 500;
    Query OK, 0 rows affected (0.79 sec)

    mysql> show variables like 'max_connections';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | max_connections | 500   |
    +-----------------+-------+

     

      2.几个常见连接错误

    若 connection 相关参数设置不当,到达一定瓶颈时可能会出现连接错误的问题,下面列举下几种常见的连接错误及解决方法。

    出现频率最高的可能就是 Too many connections 错误了,这个错误发生的原因是当前数据库的总连接数已经达到了 max_connections 数值,当再有客户端尝试连接时及会报此错误。MySQL 实际上允许 max_connections + 1 个客户端连接,额外一个连接供具有 SUPER 特权的用户使用。当发生  Too many connections 错误时,我看可以用 root 账号登录数据库,然后增大 max_connections 参数即可。其实设置适当的 max_connections 即可避免此类错误再次发生,默认的 151 显然有点小,我们可以监控下数据库连接总数,根据不同环境做出调整,比如设为 500 或 1000,当然也不能设置过大。

    若出现 Host is blocked because of many connection errors 错误时,那就是某台主机连接错误达到 max_connect_errors 参数规定的上限了。解决这个错误有两种方案,一个是进入 MySQL 命令行执行 flush hosts 命令来刷新 host ,一个是增大 max_connect_errors 参数值。个人建议可以将 max_connect_errors 参数调大些,比如 1000 或 2000 。

    对于 max_user_connections 参数,一般采用默认 0 值即可,若想要限制单个用户的最大连接数,也可以设置下此参数,比如 max_user_connections = 100 代表单个用户最多同时发起 100 个连接。

    如果客户端经常遇到 Lost connection to MySQL server at 'XXX' 错误,那就要考虑增大 connect_timeout 值了,默认值 10s 对于网络良好的情况下是够用的,如果客户端和服务端网络有延迟的情况,可以将 connect_timeout 参数调大来避免发生连接超时的错误

    总结:

    本篇文章介绍了 MySQL connection 相关内容,要记住一个稳定的数据库,连接总数一般是相对稳定的,若数据库连接状态波动很大,那要排查下是不是程序端或数据库端有做过变更。

    这四个参数的区别:

      connect_timeout:等待一个连接响应的时间,默认为 10s ,在获取连接阶段起作用,可动态修改

      interactive_timeout:指的是 mysql 在关闭一个交互的连接之前所要等待的秒数,默认是8个小时,比如mysql客户端属于此类连接

      wait_timeout:指的是 MySQL 在关闭一个非交互的连接之前所要等待的秒数,默认是8个小时,比如jdbc属于此类连接 

      lock_wait_timeout:MDL 元数据锁的超时时间,注意,凡是需要获取 MDL 锁的操作都受到这个超时参数的影响,不单单是 DDL语句,包含在表上的 DML、DDL 操作,以及视图、存储过程、存储函数、lock tables,flush table with read lock、handler 语句等。但不适用于隐式访问系统表的语句(但适用于使用 select、update 显式访问系统表的语句),如:grant 和 revoke
    等。该参数不适用于延迟插入的语句,因为发起延迟插入的会话并不会收到超时的通知。
      
    转载于:https://mp.weixin.qq.com/s/CKaMdGnVv--Lv518iz804g
     
     

  • 相关阅读:
    Hive split 分割函数
    mysql in 方法查询 按照 in队列里的顺序排序
    根据身份证前2位判断属于哪个省
    java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
    java中的三种取整函数
    mysql show status 参数解析
    java获取多个汉字的拼音首字母
    sql 的积累
    Solr根据参考点的坐标来返回范围内的小区和距离
    docker中使用gpu(darknet-yolo,tensorflow)
  • 原文地址:https://www.cnblogs.com/zmc60/p/14981096.html
Copyright © 2011-2022 走看看