mysql数据库就连接不上
时间:2006-04-12 来源:snowtty
请教,有关电子汇兑集中的问题
请问各位老大,我是江苏的,电子汇兑是UNIX版本的,我想实现前台集中,但是当连接网点数达到58个时,mysql数据库就连接不上了,netstat -am 中usock达到260个,这时用netstat -a 都不能查看usock(unix domain socket)的状态,mysqladmin也提示不能通过socket连接,可能是主机资源(socket资源)耗尽。查找了很多资料,改了许多配置都不行。有哪位老大有电子汇兑集中的经验,请不吝赐教!我搞了十几天,实在是没头绪!先谢谢了!!!!
偶这里电子汇兑还没市集中,对mysql也不熟,只有以前找到过的2篇文章,楼主试试,测试结果希望能回复一下哈.
加大MySql的最大连接数
mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些, 有两种办法可以修改最大连接数,一种是修改safe_mysqld,另一种是直接修改原代码并重新编译。下面我们就分别介绍这两种方法:
1.修改safe_mysqld
找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 :
-O max_connections=1000
例如 :(其中前面有---的是原来的内容,而+++是修改过以后的)
--- safe_mysqld.orig Mon Sep 25 09:34:01 2000
+++ safe_mysqld Sun Sep 24 16:56:46 2000
@@ -109,10 +109,10 @@
if test \"$#\" -eq 0
then
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR
- --skip-locking >> $err_log 2>&1
+ --skip-locking -O max_connections=1000 >> $err_log 2>&1
else
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR
- --skip-locking \"$@\" >> $err_log 2>&1
+ --skip-locking \"$@\" -O max_connections=1000 >> $err_log 2>&1
fi
if test ! -f $pid_file # This is removed if normal shutdown
then
然后关闭mysql重启它,用
/mysqladmin所在路径/mysqladmin -uroot -p variables
输入root数据库账号的密码后可看到
| max_connections | 1000 |
即新改动已经生效。
2.修改原代码
解开MySQL的原代码,进入里面的sql目录修改mysqld.cc找到下面一行:
{ \"max_connections\", (long*) &max_connections,1000,1,16384,0,1},
把它改为:
{ \"max_connections\", (long*) &max_connections,1000,1,16384,0,1},
存盘退出,然后./configure ;make;make install可以获得同样的效果。
Sco Unix 5.0.5
Ksh
2005-12-3 19:21:50
数据库连接过多的错误,可能的原因分析及解决办法
系统不能连接数据库,关键要看两个数据:
1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。
2、数据库当前的连接线程数threads_connected。这嵌??浠?摹?
查看max_connections、max_connections的办法见后。
如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。
因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。
但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。
这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,但强坛系统估计不会发生这种低级的编程错误。
该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技术,threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。
从强坛出错的情况看,更大的可能性是数据库系统没能进行适当地配置。下面提出一点建议。供参考
让你们的工程师把MySQL的最大允许连接数从默认的100调成32000。这就不会老出现连接过多的问题了。
查看max_connections
进入MySQL,用命令:show variables
查看数据库最大可连接数的变量值:max_connections
查看threads_connected
进入MySQL,用命令:show status
查看当前活动的连接线程变量值:threads_connected
设置max_connections
设置办法是在my.cnf文件中,添加下面的最后红色的一行:
--------------------------------------------------------------------------------
[mysqld]
port=3306
#socket=MySQL
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=64K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
set-variable = max_connections=32000
--------------------------------------------------------------------------------
修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。
注意:
1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;
2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥;
3、添加了最大允许连接数,对系统消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通
Sco Unix 5.0.5
Ksh
2005-12-3 19:22:06
强!
值此新春佳节之际,恭祝大家新春愉快,合家欢乐,万事如意,身体健康。祝愿所有朋友:工作舒心,薪水合心,被窝暖心,朋友知心,爱人同心,一切都顺心,永远都开心,事事都称心!
注册:2005年12月3日 第 5 楼
首先谢谢styr。你说的这些方法之前我已经试过了,没有什么用。我已将连接数改为2000了,还是有问题。出现问题的主要原因可能是sco unix 操作系统对unix domain socket连接数的限制。据我猜测,我们用的电子汇兑程序在连接数据库时没有指定主机名,MYsql连接时默认主机名是localhost,而localhost连接指定使用unix domain socket。问题就这样产生了。如果自己编程时,采用指定主机名,使用tcp连接,就万事OK了。
2005-12-6 8:42:19
注册:2005年6月19日 QQ 第 6 楼
还是不行就再转一个,呵呵,楼主再试试。偶是没办法试的
(联想的服务器 sco5.0.6 内存512M cpu 2G ),MYSQL 默认链接数为100, 这样只能带30台左右的终端,我们把安全平台的session改为500 MYSQL启动加上-O max_connections=1000 选项后,重启数据库看到链接数成了590,但是到30个左右用户时仍提示数据库出错 ,即 MYSQL 进程已启动请启动安全平台,(此时使用 mysql -u #安全起见屏敝了哈 -p也无法登入数据库),我们认为肯定是系统内核参数和mysql 相应的设置调整不当,请大家帮忙
首先sco unix 需要完全安装。然后
1.修改mysql的最大连接数
-O max_connections=1000
2.修改核心参数MAXUP为1000
3.修改核心参数NOFILES为1000
你觉得1000太小,还可以更大。
我这样改了之后连200个mysql连接什么问题都没有。
除此之外:还有
修改系统核心参数 (根据服务器的配置进行适当的修改)
scoadmin->hardware/kernel manager->tune parameter
3项NCLIST 2048字符表缓冲区数目,建议此参数值为2048
7项NOFILES 700(每个进程打开的最大文件数。每个终端登录后进程打开的文件数增加2,对应每个终端占用2个打开文件的文件句柄。所以,此参数值为3倍的终端数目。建议值500-800)
( ULIMIT2097152(4194303))
MAXUP 500(netstat –m下的总配置流内存大小数)500-800
NPROC NPROC核心参数确定进程表的大小。进程表必须足够大以致于能容纳下系统在运行高峰时的所有进程. 设置NPROC的值为高峰时进程数加上20%至25%的冗余量。NPROC的值应比MAXUP的值大10%以上。
12项 NSTREAM6000 (流头结构数目。若配置150个以上的终端,建议此参数值为6000)
NSTRPAGES1140 、1756(页面数。以4k为单位, 如果配置150个以上的终端,建议此参数值为3000不要超过4000,否则系统易出现怪问题)
STRSPLITFRAC 如果太小,系统中流buffer将很快变成碎块,建议此次参数值为80
13项MSGMAP 1024
MSGMAX 32767
MSGMNB 32767
15项SEMMAP 100
SEMMNI 300
SEMMNU100
16项HMMAX 409600000(5个0)注:可根据实际内存大小作相应调整
XSDSEGS 100
XSDLOTS 10
6、 修补sco unix 漏洞。506、507同样有这样的漏洞。
cd /etc/sysadm.d/bin ; chmod o-x userOsa
1.修改mysql最大链接数(1000).
2.修改系统内核参数.
3。 :shock: license用户数要够!
Sco Unix 5.0.5
Ksh
2005-12-6 18:56:36
注册:2005年12月3日 第 7 楼
再次谢谢styr。你说的方法之前我已用过,确实可以超过30个用户连接,但还是不能超过58个用户连接。目前只好用了两台服务器勉强分流。
谁有电子汇兑市集中的经验,请指教!
2005-12-7 17:17:50
注册:2005年6月19日 QQ 第 8 楼
那就只好请教省市级的高手了。
顺便咨询一下,就是电子汇兑的前后台能在同一个服务器上运行吗
偶试过不行,怀疑省局对前置机IP做了绑定
Sco Unix 5.0.5
Ksh
2005-12-7 18:04:28
注册:2005年12月3日 第 9 楼
是在一台服务器上运行。前置机没有做绑定,但是对IP地址有要求,每网点对应一IP地址,但是可以所有网点对应一个IP地址,这个地址用来下载报表数据。
我的问题终于解决了,说起来相当简单。原因是我的网络连接中TCPconnections是默认值,只有256,就是说unix domain socket不能超过256,一个电子汇兑应用占用4个连接,加上其它系统进程,所有只有58个网点可用,58*4+25>256,所以有问题。现在将TCP connections 改为1024,所以(1024-25)/4=250,现在可以开250个左右的应用。
谢谢热心的styr。我是江苏扬州的,有空来玩。
2005-12-9 16:43:29
注册:2005年8月16日 第 10 楼
我也有太多的不懂感谢二位让我对服务器集中的一个了解
不过我还想问一下:服务器集中后对应一个IP但所有电子汇对网点在一个机子是不是直接按装电子汇兑后增加机构号就行了,不需要做其它设置吗?
望二位高手指教一下,我也想把全县的机子集中起来
请问各位老大,我是江苏的,电子汇兑是UNIX版本的,我想实现前台集中,但是当连接网点数达到58个时,mysql数据库就连接不上了,netstat -am 中usock达到260个,这时用netstat -a 都不能查看usock(unix domain socket)的状态,mysqladmin也提示不能通过socket连接,可能是主机资源(socket资源)耗尽。查找了很多资料,改了许多配置都不行。有哪位老大有电子汇兑集中的经验,请不吝赐教!我搞了十几天,实在是没头绪!先谢谢了!!!!
偶这里电子汇兑还没市集中,对mysql也不熟,只有以前找到过的2篇文章,楼主试试,测试结果希望能回复一下哈.
加大MySql的最大连接数
mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些, 有两种办法可以修改最大连接数,一种是修改safe_mysqld,另一种是直接修改原代码并重新编译。下面我们就分别介绍这两种方法:
1.修改safe_mysqld
找到safe_mysqld编辑它,找到mysqld启动的那两行,在后面加上参数 :
-O max_connections=1000
例如 :(其中前面有---的是原来的内容,而+++是修改过以后的)
--- safe_mysqld.orig Mon Sep 25 09:34:01 2000
+++ safe_mysqld Sun Sep 24 16:56:46 2000
@@ -109,10 +109,10 @@
if test \"$#\" -eq 0
then
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR
- --skip-locking >> $err_log 2>&1
+ --skip-locking -O max_connections=1000 >> $err_log 2>&1
else
nohup $ledir/mysqld --basedir=$MY_BASEDIR_VERSION --datadir=$DATADIR
- --skip-locking \"$@\" >> $err_log 2>&1
+ --skip-locking \"$@\" -O max_connections=1000 >> $err_log 2>&1
fi
if test ! -f $pid_file # This is removed if normal shutdown
then
然后关闭mysql重启它,用
/mysqladmin所在路径/mysqladmin -uroot -p variables
输入root数据库账号的密码后可看到
| max_connections | 1000 |
即新改动已经生效。
2.修改原代码
解开MySQL的原代码,进入里面的sql目录修改mysqld.cc找到下面一行:
{ \"max_connections\", (long*) &max_connections,1000,1,16384,0,1},
把它改为:
{ \"max_connections\", (long*) &max_connections,1000,1,16384,0,1},
存盘退出,然后./configure ;make;make install可以获得同样的效果。
Sco Unix 5.0.5
Ksh
2005-12-3 19:21:50
数据库连接过多的错误,可能的原因分析及解决办法
系统不能连接数据库,关键要看两个数据:
1、数据库系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是100。最大是16384。
2、数据库当前的连接线程数threads_connected。这嵌??浠?摹?
查看max_connections、max_connections的办法见后。
如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时,如果程序还想新建连接线程,数据库系统就会拒绝,如果程序没做太多的错误处理,就会出现类似强坛的报错信息。
因为创建和销毁数据库的连接,都会消耗系统的资源。而且为了避免在同一时间同时打开过多的连接线程,现在编程一般都使用所谓数据库连接池技术。
但数据库连接池技术,并不能避免程序错误导致连接资源消耗殆尽。
这种情况通常发生在程序未能及时释放数据库连接资源或其他原因造成数据库连接资源不能释放,但强坛系统估计不会发生这种低级的编程错误。
该错误的简便的检查办法是,在刷新强坛页面时,不断监视threads_connected的变化。如果max_connections足够大,而threads_connected值不断增加以至达到max_connections,那么,就应该检查程序了。当然,如果采用数据库连接池技术,threads_connected增长到数据库连接池的最大连接线程数时,就不再增长了。
从强坛出错的情况看,更大的可能性是数据库系统没能进行适当地配置。下面提出一点建议。供参考
让你们的工程师把MySQL的最大允许连接数从默认的100调成32000。这就不会老出现连接过多的问题了。
查看max_connections
进入MySQL,用命令:show variables
查看数据库最大可连接数的变量值:max_connections
查看threads_connected
进入MySQL,用命令:show status
查看当前活动的连接线程变量值:threads_connected
设置max_connections
设置办法是在my.cnf文件中,添加下面的最后红色的一行:
--------------------------------------------------------------------------------
[mysqld]
port=3306
#socket=MySQL
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=64K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
set-variable = max_connections=32000
--------------------------------------------------------------------------------
修改完毕后,重启MySQL即可。当然,为了确保设置正确,应该查看一下max_connections。
注意:
1、虽然这里写的32000。但实际MySQL服务器允许的最大连接数16384;
2、除max_connections外,上述其他配置应该根据你们系统自身需要进行配置,不必拘泥;
3、添加了最大允许连接数,对系统消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,设置类似,但设置的格式要稍作变通
Sco Unix 5.0.5
Ksh
2005-12-3 19:22:06
强!
值此新春佳节之际,恭祝大家新春愉快,合家欢乐,万事如意,身体健康。祝愿所有朋友:工作舒心,薪水合心,被窝暖心,朋友知心,爱人同心,一切都顺心,永远都开心,事事都称心!
注册:2005年12月3日 第 5 楼
首先谢谢styr。你说的这些方法之前我已经试过了,没有什么用。我已将连接数改为2000了,还是有问题。出现问题的主要原因可能是sco unix 操作系统对unix domain socket连接数的限制。据我猜测,我们用的电子汇兑程序在连接数据库时没有指定主机名,MYsql连接时默认主机名是localhost,而localhost连接指定使用unix domain socket。问题就这样产生了。如果自己编程时,采用指定主机名,使用tcp连接,就万事OK了。
2005-12-6 8:42:19
注册:2005年6月19日 QQ 第 6 楼
还是不行就再转一个,呵呵,楼主再试试。偶是没办法试的
(联想的服务器 sco5.0.6 内存512M cpu 2G ),MYSQL 默认链接数为100, 这样只能带30台左右的终端,我们把安全平台的session改为500 MYSQL启动加上-O max_connections=1000 选项后,重启数据库看到链接数成了590,但是到30个左右用户时仍提示数据库出错 ,即 MYSQL 进程已启动请启动安全平台,(此时使用 mysql -u #安全起见屏敝了哈 -p也无法登入数据库),我们认为肯定是系统内核参数和mysql 相应的设置调整不当,请大家帮忙
首先sco unix 需要完全安装。然后
1.修改mysql的最大连接数
-O max_connections=1000
2.修改核心参数MAXUP为1000
3.修改核心参数NOFILES为1000
你觉得1000太小,还可以更大。
我这样改了之后连200个mysql连接什么问题都没有。
除此之外:还有
修改系统核心参数 (根据服务器的配置进行适当的修改)
scoadmin->hardware/kernel manager->tune parameter
3项NCLIST 2048字符表缓冲区数目,建议此参数值为2048
7项NOFILES 700(每个进程打开的最大文件数。每个终端登录后进程打开的文件数增加2,对应每个终端占用2个打开文件的文件句柄。所以,此参数值为3倍的终端数目。建议值500-800)
( ULIMIT2097152(4194303))
MAXUP 500(netstat –m下的总配置流内存大小数)500-800
NPROC NPROC核心参数确定进程表的大小。进程表必须足够大以致于能容纳下系统在运行高峰时的所有进程. 设置NPROC的值为高峰时进程数加上20%至25%的冗余量。NPROC的值应比MAXUP的值大10%以上。
12项 NSTREAM6000 (流头结构数目。若配置150个以上的终端,建议此参数值为6000)
NSTRPAGES1140 、1756(页面数。以4k为单位, 如果配置150个以上的终端,建议此参数值为3000不要超过4000,否则系统易出现怪问题)
STRSPLITFRAC 如果太小,系统中流buffer将很快变成碎块,建议此次参数值为80
13项MSGMAP 1024
MSGMAX 32767
MSGMNB 32767
15项SEMMAP 100
SEMMNI 300
SEMMNU100
16项HMMAX 409600000(5个0)注:可根据实际内存大小作相应调整
XSDSEGS 100
XSDLOTS 10
6、 修补sco unix 漏洞。506、507同样有这样的漏洞。
cd /etc/sysadm.d/bin ; chmod o-x userOsa
1.修改mysql最大链接数(1000).
2.修改系统内核参数.
3。 :shock: license用户数要够!
Sco Unix 5.0.5
Ksh
2005-12-6 18:56:36
注册:2005年12月3日 第 7 楼
再次谢谢styr。你说的方法之前我已用过,确实可以超过30个用户连接,但还是不能超过58个用户连接。目前只好用了两台服务器勉强分流。
谁有电子汇兑市集中的经验,请指教!
2005-12-7 17:17:50
注册:2005年6月19日 QQ 第 8 楼
那就只好请教省市级的高手了。
顺便咨询一下,就是电子汇兑的前后台能在同一个服务器上运行吗
偶试过不行,怀疑省局对前置机IP做了绑定
Sco Unix 5.0.5
Ksh
2005-12-7 18:04:28
注册:2005年12月3日 第 9 楼
是在一台服务器上运行。前置机没有做绑定,但是对IP地址有要求,每网点对应一IP地址,但是可以所有网点对应一个IP地址,这个地址用来下载报表数据。
我的问题终于解决了,说起来相当简单。原因是我的网络连接中TCPconnections是默认值,只有256,就是说unix domain socket不能超过256,一个电子汇兑应用占用4个连接,加上其它系统进程,所有只有58个网点可用,58*4+25>256,所以有问题。现在将TCP connections 改为1024,所以(1024-25)/4=250,现在可以开250个左右的应用。
谢谢热心的styr。我是江苏扬州的,有空来玩。
2005-12-9 16:43:29
注册:2005年8月16日 第 10 楼
我也有太多的不懂感谢二位让我对服务器集中的一个了解
不过我还想问一下:服务器集中后对应一个IP但所有电子汇对网点在一个机子是不是直接按装电子汇兑后增加机构号就行了,不需要做其它设置吗?
望二位高手指教一下,我也想把全县的机子集中起来
相关阅读 更多 +