一个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
相关阅读
原文参见:http://FansUnion.cn/articles/3027 (小雷网-FansUnion.cn)
一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)的更多相关文章
- 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引
先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...
- 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例
最近,项目中遇到了数据库连接不够的问题. 异常信息com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data ...
- 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确
摘要 上一篇,一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间 ,讲述了项目优化的整体背景,重点讲述了统一显示了Web项目SQL语句的执行时间. 本篇,将重点介绍提高 ...
- 一个Web报表项目的性能分析和优化实践(五):重构有助于性能优化么?
项目从初次开发到现在,已经快3年了.期间,有N个工程师参与过. 需求方面:增加减少,反反复复,无数次:人力方面:增加减少,不稳定:时间方面:功能开发着急上线,Bug开发紧急修复. 因此,代码臃肿,问题 ...
- [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会. 1.我首先需要知道哪些函数执行了多少时间 ...
- 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会. 1.我首先需要知道哪些函数执行了多少时间 ...
- 一个Web报表项目的性能分析和优化实践(七):性能监测工具JavaMelody
简介 JavaMelody 能够监测Java或Java EE应用程序服务器,并以图表的方式显示:Java内存和Java CPU使用情况,用户Session数量,JDBC连接数,和http请求.sql请 ...
- Reporting Service报表项默认可见+号和-号的显示问题
在Reporting Service里面可以设置报表项(组.tablix行.tablix列.文本框等所有SSRS报表项)的可见性,并且可以设置某个报表项的可见性由点击另外一个报表项来控制,比如报表项A ...
- 携程App的网络性能优化实践
首先介绍一下携程App的网络服务架构.由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现.网络通讯属于基础&业务框架层中基础设施的一 ...
随机推荐
- Perfect Rectangle(完美矩形)
我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1,2,2] ...
- MFC,C++,VC++,VS2010 之间究竟是什么关系
C++是在C语言的基础上发展而来的面向对象的一种语言: MFC是基于C++类的窗口开发工具,内含大量的基类.降低编程人员的工作量: VC++是一种开发工具. VS2010是更高版本号的开发工具,功能强 ...
- ssh跳板登陆太麻烦,使用expect每次自动登录 利用expect 模拟键盘动作,在闲置时间之内模拟地给个键盘响应
#!/usr/bin/expect -f #设置超时时间 set timeout #这里设置了跳板机的密码 set password "你的跳板机密码" #连接跳板机 spawn ...
- 网络通信-ping命令
- 6.C语言文件操作之英语电子字典的实现,dos版
多的不说,直接上代码: 里面涉及的字典文件在这:这是传送门,下载下来以后把该文件放在工程目录下即可 #define _CRT_SECURE_NO_WARNINGS #include <stdio ...
- 安卓开发--AsyncTask
package com.cnn.asynctask; import android.app.Activity; import android.content.Intent; import androi ...
- 在cncc的最后几天的笔记
数据库范式:http://blog.csdn.net/fg2006/article/details/6936439 数据库事务隔离级别:http://blog.csdn.net/fg2006/arti ...
- IBM小机的开机步骤
IBM小机的开机步骤 以下以 IBM P570 小机包含静态逻辑分区(LPAR) 的 Oracle9i RAC环境为例进行讨论 1. 设备(小机.存储.光交......)加电 2. 启动存储 3. 启 ...
- 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 ...
- Threading and Tasks in Chrome
Threading and Tasks in Chrome Contents Overview Threads Tasks Prefer Sequences to Threads Posting a ...