• 一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)


    在上一篇文章中"一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例 "提到,项目中新增几个数据库后,数据库最大连接数达到了默认的最大值100。此时,如果再创建连接,就会报错(TooManyConnections)。

    因此,需要手动设置MySQL的最大连接数(max_connections)。

    就是这么一个简单的事,花了几个小时,查询很多资料,请教好友同事“飞鸟”,才搞定这个问题。

    问题中存在问题,问题中存在陷阱,是这个问题的真实写照。

    1.设置MySQL的最大连接数。
     网友有如下经验,使用下面这个命令
     set GLOBAL max_connections=1500;
     
     让人迷惑的是,提示“查询OK,0行受到影响”
     mysql>  set GLOBAL max_connections=1500;
     Query OK, 0 rows affected (0.00 sec)

     我误认为没有设置成功,并且通过“show status”这个命令也没有找到“max_connections”这个参数和值。
     
     实际查询确认方法
     mysql> show variables like '%max_connections%';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | max_connections | 1500  |
    +-----------------+-------+
    1 row in set (0.05 sec)
    通过这种方法,MySQL重启后,仍然有效。

    2.MySQL配置文件总是被忽略。

    World-writable config file '/etc/my.cnf' is ignored
    To fix this problem, use the following command to change file’s permissions
    要修复该问题,使用以下命令更改该文件的权限。

    chmod 644 /etc/my.cnf
    http://hi.baidu.com/perfect_song/item/32c25c0434dea110ebfe38bb

    权限过大是导致这个问题的原因。

    3.奇葩的MySQL配置文件。

    Linux系统/etc/my.cnf有下面这项配置。
     因为第一次打开这个文件的时候,就有这项配置,我就觉得这个配置是合理的。
     不但如此,我们启动MySQL的方式是 "mysqld_safe &",所以我理解成下面这个配置是
     专门为这个命令配置的。
     
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/usr/local/mysql/mysqld.pid
    datadir=/usr/local/mysql/var
    socket=/usr/local/mysql/mysql.sock
    max_connections=1000

     实际上,上面这个配置根本是不合理的,真够坑的。

    正确的配置

    [mysqld]

    datadir=/usr/local/mysql/var
    socket=/usr/local/mysql/mysql.sock
    pid-file=/usr/local/mysql/mysqld.pid
    log-error=/var/log/mysqld.log
    max_connections=1000
    疑惑1:如果这个地方配置了“max_connections”,同时设置了“set GLOBAL max_connections=1500”,哪个会起作用呢?

    疑惑2:今天在看MySQL5.1参考手册时,"一般情况,你不应编辑mysqld_safe脚本。相反,应使用命令行选项或my.cnf选项文件的[mysqld_safe]部分的选项来配置mysqld_safe。"貌似[mysqld_safe]是可以存在的。


    更多详细配置

    可以参考Windows下MySQL的配置参数, my.ini、 my-huge.ini、 my-large.ini。

    4.mysqld_safe正确的启动方式。

    "mysqld_safe & ","&"的作用是让MySQL服务在后台跑。这样,咱们仍然可以正常使用当前bash终端。

     以前书上有讲过,忘记了。

     基础不牢,地动山摇!

    5.无法使用localhost主机连接mysql。

     mysql -uroot -p123456
     无法登录,提示"Can't connect to local MySQL server through socket '/tmp/mysql.sock'"
     
     而 mysql -h 192.168.1.1 -uroot -p123456
     可以登录。

    最终,我们发现mysql.sock是手动创建的,而Linux的socket文件是不能被编辑的。
     
     解决方案:给个链接。
     ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

    或者mysql的配置文件socket=/usr/local/mysql/mysql.sock,不使用/tmp/mysql.sock。

    小结

    在解决这个看似简单的问题过程中,遇到了更多的问题。

    耐心真的非常重要!

    此外,认真看书,打好基础,也是可以避免一些问题的。

    幸好,有网友分享经验,有好友同事“飞鸟”相助,总算是圆满解决了。

    自己也算是积累了不少经验。

    反思

    “老鸟”与“菜鸟”的一个重要区别就是,“老鸟”有着丰富的实践经验,而“菜鸟”没有。

    很多问题,不亲自遇到并解决一次,你根本就不知道这些莫名其妙的问题为什么会发生。

    我不想一直作为“菜鸟”,希望早日成为“老鸟”,倘若是一只“年轻的老鸟”就更好了。

    不但如此,还希望能够及时总结这些经验,供今日的和明日的菜鸟参考。

    若干年之后,当回想起作为“菜鸟”的日子,亦能感到自豪。


    参考资料

    http://www.oschina.net/code/snippet_222150_12958

    http://www.blogjava.net/asenyifei/articles/82575.html

    相关阅读

    一个Web报表项目的性能分析和优化实践

    原文参见http://FansUnion.cn/articles/3027 (小雷网-FansUnion.cn)

  • 相关阅读:
    《刀塔传奇》
    SSH端口转发
    objective-c与c++的差异
    mysql 远程连接速度慢的解决方案
    maven
    automapper 自动映射 集成asp.net Core2.1
    swagger 集成asp.net Core2.1
    asp.net Core 跨域配置
    处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    SharedPreferences
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463472.html
Copyright © 2020-2023  润新知