在使用Mysql的过程当中,你老是会遇到这样那样的问题,每次去网上查找也相对比较麻烦,因此在此整理一下(以linux ubantu16 系统为例)。html
=====================================================================前端
安利一下个人开源项目: 前端监控系统
mysql
=====================================================================linux
1. mysql 链接数太多(SequelizeConnectionError: Too many connections)web
这个就是最多见的问题了。由于我作的这个是前端监控系统,日志上报量比较大,因此常常会遇到链接数不够用的状况。 除了你要使用其余技术来缓解并发量,还须要适当的设置mysql数据库的最大链接数。那么怎么增长mysql的最大链接数呢,设置多大为合适呢,这又是一个比较麻烦的问题了。下边是个人一些浅见,仅供参考。sql
首先咱们须要登陆mysql, 进入mysql的命令行:数据库
查看当前mysql的链接数:服务器
mysql> show global status like 'Max_used_connections'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | Max_used_connections | 403 | +----------------------+-------+ 1 row in set (0.00 sec)
如何设置mysql的最大链接数呢?并发
第一种方法:经过mysql命令设置(这种方法是临时性的,重启mysql之后就会失效)阿里云
mysql> set GLOBAL max_connections=2000; Query OK, 0 rows affected (0.00 sec)
第二种方法:进入mysql目录(/usr/local/mysql)找到my.cnf文件,添加以下配置(注意:最大链接数不要设置过大,有可能会在启动的时候爆掉哦),而后执行命令$: service mysql restart
[mysqld] max_connections=1000
Mysql的最大链接数设置多少合适呢?
对照阿里云的TCP链接数来看一下,阿里云的TCP链接数能够看出瞬间并发量的多少,而后跟咱们的数据库链接数作个对比。正常状况下TCP链接数为1K左右的时候,MySQL的链接数为400左右。原本瞬间的并发量能达到9K, 可是我将一部分流量导入到其余服务器上,因此如今最高的并发量可以达到3.4K。当最大3.4K并发量的时候,有两台服务器同时访问mysql,个人数据库链接数是1153个左右。
因此,如何设置mysql最大链接数,能够参考一下个人这个数值。
2. Mysql链接错误太多(SequelizeConnectionError: Host 'xx.xx.xx.xx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts')
这个问题并不常见,由于通常mysql的默认值是100。只有当同一个IP对mysql访问出现100次链接错误的时候,mysql就会拒绝这个ip的请求访问。由于个人日志服务和数据库是分离的,因此,常常会在量大的时候出现这个问题。
查看链接报错配置:
mysql> show variables like '%max_connect_errors%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 100 | +--------------------+-------+ 1 row in set (0.01 sec)
单个ip链接报错查询:
select SUM_CONNECT_ERRORS as count from performance_schema.host_cache where ip='xxx.xxx.xxx.xxx'
设置链接数报错最大数量:
mysql> set GLOBAL max_connect_errors=1000; Query OK, 0 rows affected (0.00 sec)