博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个Web报表项目的性能分析和优化实践(六):设置MySQL的最大连接数(max_connections)...
阅读量:5780 次
发布时间:2019-06-18

本文共 2474 字,大约阅读时间需要 8 分钟。

hot3.png

在上一篇文章中""提到,项目中新增几个数据库后,数据库最大连接数达到了默认的最大值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

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

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。

小结

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

耐心真的非常重要!

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

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

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

反思

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

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

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

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

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

参考资料

相关阅读

原文参见: (小雷网-FansUnion.cn)

转载于:https://my.oschina.net/jiutianniao/blog/400473

你可能感兴趣的文章
(step6.1.5)hdu 1233(还是畅通工程——最小生成树)
查看>>
Membership三步曲之进阶篇 - 深入剖析Provider Model
查看>>
huffman编码——原理与实现
查看>>
Linux移植随笔:终于解决Tslib的问题了【转】
查看>>
前端优化及相关要点总结
查看>>
Vue 列表渲染
查看>>
struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径)
查看>>
25 个精美的手机网站模板
查看>>
C#反射实例应用--------获取程序集信息和通过类名创建类实例
查看>>
VC中实现文字竖排的简单方法
查看>>
会话标识未更新
查看>>
阿里架构师:程序员必须掌握的几项核心技术能力
查看>>
程序员常用的六大技术博客类
查看>>
vue中动画的实现的几种方式
查看>>
Iceworks 2.8.0 发布,自定义你的 React 模板
查看>>
胖哥学SpringMVC:请求方式转换过滤器配置
查看>>
Kotlin 更加优雅的 Builder - 理解 with
查看>>
前端日拱一卒D6——字符编码与浏览器解析
查看>>
python学习笔记- 多线程
查看>>
换一种思维看待PHP VS Node.js
查看>>