视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql无法连接问题的定位和修复过程分享
2020-11-09 21:10:26 责编:小采
文档

定位结果如下:

客户环境:
windows server 2003 r2 standard edition sp2
mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)
apache 2.2
瑞星
webshield客户端1.08

问题已复现。可以优化,无法确定是webshield导致的。

搭建环境:
windows server 2003 r2 standard edition sp2
mysql 5.0.18 for win32
apache-2.2.21-win32-x86-no_ssl
php-5.2.17-win32-vc6-x86
瑞星23.00.50.25

搭建环境过程中遇到的几个问题:

在下载apache与php时,请注意apache与php匹配问题。

a)PHP5.3有VC6与VC9版本,应选择VC6版本。原因如下:

i. VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。
ii. VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。

b)PHP5.3的Thread Safe和Non Thread Safe版本。Apache no_ssl版应与php Thread Safe版搭配。若与Non Thread Safe搭配,apache启动出错:“Apache is running a threaded MPM,but your PHP Modle is not compiled to be threadsafe. You need to recompile PHP.”

i. Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;
ii. Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
注意apache对网站及PHP的正确配置。特别注意配置文件中LoadModule, PHPIniDir,DocumentRoot,ServerRoot,Directory,DirectoryIndex,AddType application/x-httpd-php等项的配置
安装后 mysql 后(管理员账号密码:admin/admin),在PHP代码中使用admin连接数据库失败,cmd执行mysql –u root -p启用root用root可正常连接数据库。

问题复现:

PHP最长执行时间。

a)php最长执行时间默认为30秒,超过30秒后被中止执行,与mysql的连接也被断开。
b)尝试增大此值,修改php目录下的php.ini配置文件,将max_execution_time = 30 改为max_execution_time = 300。如果设为0,表示不PHP最大执行时间。
c)避免了因最长执行时间而导致mysql连接失败。

网站流量大导致mysql无法连接。

a)编写php脚本对mysql进行测试,发现当对mysql进行频繁的连接/断开操作时,mysql很快出现无法连接问题(错误代码:10048)。当中止所有连接,2分钟后mysql又恢复正常。若不停止连接,mysql一直无法连接。
b)尝试从两方面优化:
i. 修改windows注册表项TcpTimedWaitDelay值为30(默认为240秒),减少此条目的值允许 TCP/IP 更快地释放已关闭的连接, 为新连接提供更多资源。
ii. 修改windows注册表项MaxUserPort为53768 (该值表示从系统请求任何可用用户端口时所用最大端口数,TCP/IP 可指定的最高端口号,默认值为5000)以处理更多的请求。

c)修改完注册表项后测试,mysql情况大有改善:mysql连接错误出现的情况大有减少,出错后自我恢复的能力大有提高。

针对以上两种情况,分别对安装了webshield 1.08与未安装webshield 1.08进行了测试,两者测试结果一样。

优化:

max_execution_time的修改:
打开php目录下的php.ini文件,找到max_execution_time = 30 这行,将30修改为想要的数字。
TcpTimedWaitDelay与MaxUserPort的修改:
代码如下:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:00008000

您可能感兴趣的文章:

  • php无法连接mysql数据库的正确解决方法
  • IPv6设置后如何解决MySQL无法连接localhost的问题
  • php后台经常提示无法连接mysql 刷新后又可以访问的解决方法
  • KB967723造成MySQL频繁无法连接
  • 远程无法连接SQL2000及MySQL的原因和解决办法
  • MYSQL无法连接 提示10055错误的解决方法
  • 下载本文
    显示全文
    专题