在上一篇文章中"一个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)

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

  1. 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引

    先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...

  2. 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例

    最近,项目中遇到了数据库连接不够的问题. 异常信息com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data ...

  3. 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确

    摘要 上一篇,一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 ,讲述了项目优化的整体背景,重点讲述了统一显示了Web项目SQL语句的执行时间. 本篇,将重点介绍提高 ...

  4. 一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?

    项目从初次开发到现在,已经快3年了.期间,有N个工程师参与过. 需求方面:增加减少,反反复复,无数次:人力方面:增加减少,不稳定:时间方面:功能开发着急上线,Bug开发紧急修复. 因此,代码臃肿,问题 ...

  5. [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  6. 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...

  7. 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody

    简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...

  8. Reporting Service报表项默认可见+号和-号的显示问题

    在Reporting Service里面可以设置报表项(组.tablix行.tablix列.文本框等所有SSRS报表项)的可见性,并且可以设置某个报表项的可见性由点击另外一个报表项来控制,比如报表项A ...

  9. 携程App的网络性能优化实践

    首先介绍一下携程App的网络服务架构.由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现.网络通讯属于基础&业务框架层中基础设施的一 ...

随机推荐

  1. Perfect Rectangle(完美矩形)

    我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1,2,2] ...

  2. MFC,C++,VC++,VS2010 之间究竟是什么关系

    C++是在C语言的基础上发展而来的面向对象的一种语言: MFC是基于C++类的窗口开发工具,内含大量的基类.降低编程人员的工作量: VC++是一种开发工具. VS2010是更高版本号的开发工具,功能强 ...

  3. ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应

    #!/usr/bin/expect -f #设置超时时间 set timeout #这里设置了跳板机的密码 set password "你的跳板机密码" #连接跳板机 spawn ...

  4. 网络通信-ping命令

  5. 6.C语言文件操作之英语电子字典的实现,dos版

    多的不说,直接上代码: 里面涉及的字典文件在这:这是传送门,下载下来以后把该文件放在工程目录下即可 #define _CRT_SECURE_NO_WARNINGS #include <stdio ...

  6. 安卓开发--AsyncTask

    package com.cnn.asynctask; import android.app.Activity; import android.content.Intent; import androi ...

  7. 在cncc的最后几天的笔记

    数据库范式:http://blog.csdn.net/fg2006/article/details/6936439 数据库事务隔离级别:http://blog.csdn.net/fg2006/arti ...

  8. IBM小机的开机步骤

    IBM小机的开机步骤 以下以 IBM P570 小机包含静态逻辑分区(LPAR) 的 Oracle9i RAC环境为例进行讨论 1. 设备(小机.存储.光交......)加电 2. 启动存储 3. 启 ...

  9. Example of working with a dump.

    Let's say that you are looking at a crash dump, so following the first command from this page you do ...

  10. Threading and Tasks in Chrome

    Threading and Tasks in Chrome Contents Overview Threads Tasks Prefer Sequences to Threads Posting a ...