在上一篇文章中"一个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. 一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询

    这两天加班,不能兼顾博客的更新.请大家见谅. 有时候我们创建完索引之后,数据源可能有更新的内容.而我们又想像数据库那样能直接体如今查询中.这里就是我们所说的增量索引.对于这种需求我们怎么来实现呢?lu ...

  2. 获取当前最上层controller

    - (UIViewController *)topViewController { UIViewController *resultVC; resultVC = [self _topViewContr ...

  3. [JZOJ3385] [NOIP2013模拟] 黑魔法师之门 解题报告(并查集)

    Description 经过了16个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z副官的愚蠢,地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Vi ...

  4. mysql if使用实例

    //DELIMITER DROP PROCEDURE if EXISTS createAmountCount; create PROCEDURE createAmountCount() BEGIN D ...

  5. SharePoint InfoPath 保存无法发布问题

    设计完表单以后提示以下错误 错误描述 InfoPath无法保存下列表单:******* 此文档库已被重命名或删除,或者网络问题导致文件无法保存.如果此问题持续存在,请于网络管理员联系. 可参考网站 & ...

  6. 使用Onedrive

    买了个某捷的大硬盘,于是发现比较坑,非要用云存储才能获得额外200G.于是费了一个多小时.不过学习到了很多. 首先硬盘下会给出对应的exe文件,点击运行就可以. 之后注册希捷的账号,以及微软的账号. ...

  7. $.widget 编写jQueryUI插件(widget)

    转自:MainTao: 编写jQueryUI插件(widget) 使用jQueryUI的widget来写插件,相比于基本的jquery插件有一些好处: * 方便实现继承,代码重用 * 默认是单例 * ...

  8. 深入理解 sudo 与 su 之间的区别

    深入理解 sudo 与 su 之间的区别 作者: Himanshu Arora 译者: LCTT zhb127 在早前的一篇文章中,我们深入讨论了 sudo 命令的相关内容.同时,在该文章的末尾有提到 ...

  9. centos7 安装 Python netsnmp模块

    由于模块的安装过程中有点艰难(其实挺简单,只是参照网上的教程很多都装不成功,花了很多时间...),所以记下来备忘. 先装一下python-devel 模块,执行命令 yum install pytho ...

  10. iOS开发——设置屏幕亮度

    想在APP里面调节屏幕的亮度,这只是个小众需求.而且,虽然可以直接调节手机的亮度,但是它还是个需求,客户有需求,剩下的就是我们的事了,好了,吐槽到此结束. 刚拿到这个需求的人,或许想的是直接对view ...