MySQL数据库 Too many connections
成都创新互联专注于高明网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供高明营销型网站建设,高明网站制作、高明网页设计、高明网站官网定制、成都小程序开发服务,打造高明网络公司原创品牌,更为您提供高明网站排名全网营销落地服务。
出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;
当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢?
正常的mysql_connect 之后调用 mysql_close()关闭连接
但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘记mysql_close();
所以在程序return 之前一定要判断是否close(),最稳妥的方法就是在写任何函数时都只有一个出口!
还有可以通过修改mysql配置文件来加大允许连接的数量!
有时你的服务器是经常出现这样的错误呢:
错误信息如下:
Can not connect to MySQL server
Error: Too many connections
Errno.: 1040
Similar error report has beed dispatched to administrator before.
从官方文档知道Linux上面编译安装的mysql默认的连接为100个
文档:
mysql官方告诉我们需要修改max_connections的值,那么我们怎么去修改呢?有两种方法
1、修改配置文件文件
修改/etc/my.cnf这个文件,在[mysqld] 中新增max_connections=N,如果你没有这个文件请从编译源码中的support-files文件夹中复制你所需要的*.cnf文件为到 /etc/my.cnf。我使用的是my-medium.cnf,中型服务器配置。例如我的[mysqld]的内容如下
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 160M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections=1000
由于对mysql还不是很熟悉,所以很多参数没有修改。哈哈。。
2、非使用mysqld脚本自动启动的用户。
修改MYSQLHOME/bin/mysqldsafe文件例如:/usr/local/mysql/bin/mysqldsafe这个文件grep−n‘maxconnection′
MYSQLHOME/bin/mysqldsafe文件例如:/usr/local/mysql/bin/mysqldsafe这个文件grep−n‘maxconnection′MYSQL_HOME/bin/mysqld_safe
修改对应行号的max_connections参数值
3、服务器登录mysql : mysql -u root -p
百分之九十进不去,进不去的执行重启命令 :/etc/init.d/mysql restart(centos系统)
此时重启mysql就能连接mysql了,如果还有时间,可以继续下一步,治病要治本
打开配置文件 添加一下配置 vi /etc/my.cnf
wait_timeout = 600
interactive_timeout = 600
再次重启mysql即可
原理解答
mysql 默认100 连接数,超过则连不上,实际工作的连接数远远没有100,大部分在sleep
所以要么增大连接数,要么杀掉无用连接,推荐后者。
1、可能是/opt/mysql-master/data/数据目录mysql用户没有权限(修改数据目录的权限)
解决方法 :给予权限,执行 "chown -R mysql.mysql /opt/mysql-master/data" 然后重新启动mysqld
2、可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
3、可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的二进制日志目录看看,如果存在mysql-binlog.index,就赶快把它删除掉吧
4、mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /opt/mysql-master/data
5、skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6、错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
7、selinux惹的祸,如果是centos系统,默认会开启selinux
解决方法:
先临时改为警告模式:[root@www php]# setenforce 0然后打开/etc/sysconfig/selinux,把SELINUX=enforcing改为SELINUX=disabled
8、可以试着把mysql.cnf默认文件开启,排查是不是配置文件的错误。
常见配置错误有:
查看配置文件/etc/my.cnf里有没有innodb_buffer_pool_size这个参数
innodb_buffer_pool_size:主要作用是缓存innodb表的索引,数据,插入数据时的缓冲;
默认值:128M;专用mysql服务器设置此值的大小: 系统内存的70%-80%最佳。如果你的系统内存不大,查看这个参数,把它的值设置小一点吧
温馨提示:记得开启mysql错误日志,方便自己排错。
vim /etc/my.cnf 各位可以根据自己的my.cnf文件编辑[mysql_safe]
log-error = /data/mysql-master/logs/error.log
环境:
MySQL5.6社区版本
操作系统:CentOS6.3
问题:
执行安装命令
然后安装到中途报如下类似错误:
原因:
这是由于包冲突引起的。
解决方法:
先移除冲突的libs包,再进行安装即可。
移除mysql-libs-5.1的包
第四步骤:重新执行安装脚本
安装成功之后:初始化mysql数据库
设置用户名和密码:
在DOS下试用命令排除:①CMD②for %1 in (%WinDir%\system32\*.dll) do regsvr32.exe /s %1③for %1 in (%WinDir%\system32\*.ocx) do regsvr32.exe /s %1\x0d\x0a具体做法:开始-运行-输入cmd--回车,在命令提示符下输入下面命令:\x0d\x0afor %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1回车。 \x0d\x0a完成后,再输入下面的:\x0d\x0afor %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车。如果怕输入错误,可以复制这两条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。
MySQL安装时applying security settings出错,是设置错误造成的,解决方法如下:
1、首先下载nysql的yum仓库源,不是源码包或者其它的rpm包。
2、然后找和自己操作系统匹配的版本进行下载。
3、然后使用rpm -ivh mysql57-community-release-el6-11.noarch.rpm 命令进行安装,完成之后检查是否会生成repo文件。
4、使用yum install mysql-community-server进行安装mysql。
5、最后启动mysql服务[root@localhost ~]# service mysqld startStarting mysqld:。
我遇到同样的错误,折腾了好久才摸索出来。网上的解决办法都试过了,没有确实可行的。最终总结出来,终于解决了。
我的下载的是mysql-5.7.9绿色版出的问题。最终解决过程供你参考:
1、下载的mysql-5.7.9,出现你的问题。试了各种办法无法解决。有网友说mysql-5.7.9版本有问题。我改下载了5.6.27版本,尝试不成功。但报错变为:无法启动mysql服务,发生错误1067。解决办法:my.ini 添加 tmpdir = D:\mysql-5.6.27-winx64\data。问题解决。
2、后来我对比了mysql-5.7.9与5.6.27,发现mysql-5.7.9-winx64没有data目录,mysql-5.6.27-winx64\data\mysql,存了不少数据文件。原来调试5.7.9的版本时,记得日志报告一直有mysql.user、mysql.plugin不存在的提示。(原以为这些文件会自动生成)。后来把这个mysql-5.6.27-winx64\data下的mysql文件夹整个复制到5.7.9版本中的同目录下。问题解决。