正在加载中……
最新消息:欢迎大家访问,导航分类不完善,如果找不到自己想要的文章,可以通过【关键词】来进行搜索,^_^!

“DedeCms错误警告:连接数据库失败”的解决办法

CMS相关 REKFAN.COM 56358浏览 0评论

更多


服务器环境:

windows2003 + IIS + php + mysql

DedeCms错误警告/错误提示:

Error page: /dede/login.php
Error infos: DedeCms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错!

服务器症状:

服务器出现大量mysql连接,dedecms也常常会出现DedeCms错误警告:连接数据库失败,可能数据库密码不对或数据的警告。 (但数据库连接、用户名、密码配置正确的)

分析症状原因:

当TCP连接被关闭时,{ Protocol, Local IP, Local Port, Remote IP, Remote Port}五元组就进入TIME_WAIT状态,默认时间是4分钟。可以通过一组命令看看tcp的连接状态:
在命令提示行下输入:netstat -ano命令
-----------------------------------------
Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    10.10.10.5:3306       10.10.10.2:56140      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.2:56177      ESTABLISHED     232
  TCP    10.10.10.5:3306       10.10.10.3:6191       TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.3:6207       TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39254      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39295      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39306      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39320      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39330      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39335      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39337      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39343      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39346      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39350      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39352      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39364      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39373      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39377      TIME_WAIT       0
  TCP    10.10.10.5:3306       10.10.10.4:39380      TIME_WAIT       0
-------------------------------------
本地ip,远程ip,远程端口都是固定的,只有本地端口是变化的,本地端口只能使用1024-5000,因此如果在4分钟内发起了大约4000个连接,这时就会发生异常,导致后面的机器链接不上!
每一个 SQL Server或者MySql 连接都有一个 TCP/IP 套接字。如果在不到四分钟的时间内快速打开和关闭了 4000 个套接字,就会达到客户端匿名端口的默认最大设置,并且在现有 TIME_WAIT 套接字超时前新的套接字连接尝试将不会成功。

解决办法如下:

微软给出的方法是修改注册表

TcpTimedWaitDelay 描述:
确定 TCP/IP 可释放已关闭连接并重用其资源前,必须经过的时间。关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周期(2MSL)状态。此时间期间,重新打开到客户机和服务器的连接的成本少于建立新连接。减少此条目的值允许 TCP/IP 更快地释放已关闭的连接,为新连接提供更多资源。如果运行的应用程序需要快速释放和创建新连接,而且由于 TIME_WAIT 中存在很多连接,导致低吞吐量,则调整此参数
缺省值:0xF0,它将等待时间设置为 240 秒(4 分钟)。 建议值:最小值为 0x1E,它将等待时间设置为 30 秒。

打开注册表编辑器,如 Regedit.exe 或 Regedt32.exe。
导航到:[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters]
双击 TcpTimedWaitDelay,然后将“数值数据” 字段设置为 30(十进制)。
如果注册表里没有TcpTimedWaitDelay,创建名为 TcpTimedWaitDelay 的新 REG_DWORD 值。 将此值设置为十进制30,其为十六进制 0x0000001e。该值将等待时间设置为 30 秒。
关闭注册表编辑器,然后重新启动计算机。

MaxUserPort 描述:确定在应用程序从系统请求可用用户端口时,TCP/IP 可指定的最高端口号。

导航到:[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters]
双击 MaxUserPort,然后将“数值数据” 字段设置为 65534(十进制)。
如果注册表里没有MaxUserPort,创建名为 MaxUserPort 的新 REG_DWORD 值。 将此值设置为十进制65534,其为十六进制 0x0000fffe。
关闭注册表编辑器,然后重新启动计算机。

下面我已经将注册表整理好了,大家只需要将下面代码粘贴到记事本,然后保存为xxxx.reg(xxxx可以随便命名),双击导入注册表,然后重新启动计算机!

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\]
"MaxUserPort"=dword:0000fffe
"TcpTimedWaitDelay"=dword:0000003c

转载请注明:|REKFAN|系统运维| » “DedeCms错误警告:连接数据库失败”的解决办法

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址