在上一篇文章中"一个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. Linux下PHP开启Oracle支持(oci8)

    使用php的常见问题是:编译php时忘记加入某扩展,后来想加入扩展,可是由于安装php后又装了一些东西如PEAR等,不想删除文件夹重装,那么此时就须要自己又一次添加某模块支持了,Linux操作系统下能 ...

  2. ListView实现丰富的列表功能

    ListView实现丰富的列表功能 1.主布局activity_main.xml <?xml version="1.0" encoding="utf-8" ...

  3. BootStrap--panel面板

    1 <div class="panel panel-default"> <div class="panel-body"> 这是一个基本的 ...

  4. Qihoo 360 altas 实践

    Qihoo 360 altas 实践 简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Prox ...

  5. vue-router路由配置

    转自http://www.cnblogs.com/padding1015/ 两种配置方法:在main.js中 || 在src/router文件夹下的index.js中 src/router/index ...

  6. ArchLinux 设置时间同步和硬件时间同步错误 No usable clock interface found

    笔记本不知道怎么了,总是时间对不上 硬件时间也设置不了,只能时间同步了 手动时间同步 ntpdate即可,ntp服务器在这里用这两个就好了 cn.ntp.org.cn 或 edu.ntp.org.cn ...

  7. (转载)详细图解mongodb下载、安装、配置与使用

    记得在管理员模式下运行CMD,否则服务将启动失败 转载:http://blog.csdn.net/boby16/article/details/51221474 详细图解,记录 win7 64 安装m ...

  8. webStrom的破解以及汉化

    破解方法: 把JetbrainsCrack-3.1-release-enc.jar包放到bin目录下,然后把webstorm64.exe.vmoptions文件用文本打开, 在最后面加上一句-java ...

  9. 【Fiddler】使用fiddler抓取指定浏览器的包

    参考资料:http://blog.csdn.net/sufubo/article/details/49331705 使用fiddler抓取不到浏览器的包时常用的解决办法: 1.必须先打开Fiddler ...

  10. python 异步IO

    参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143208573 ...