mysql无法连接问题的定位和修复过程分享
定位结果如下:
客户环境:
windowsserver2003r2standardeditionsp2
mysqlVer14.12Distrib5.0.18,forWin32(ia32)
apache2.2
瑞星
webshield客户端1.08
问题已复现。可以优化,无法确定是webshield导致的。
搭建环境:
windowsserver2003r2standardeditionsp2
mysql5.0.18forwin32
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版本是使用VisualStudio6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。
ii.VC9版本是使用VisualStudio2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。
b)PHP5.3的ThreadSafe和NonThreadSafe版本。Apacheno_ssl版应与phpThreadSafe版搭配。若与NonThreadSafe搭配,apache启动出错:“ApacheisrunningathreadedMPM,butyourPHPModleisnotcompiledtobethreadsafe.YouneedtorecompilePHP.”
i.ThreadSafe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择ThreadSafe版本;
ii.NonThreadSafe是非线程安全,在执行时不进行线程(Thread)安全检查。FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择NonThreadSafe版本。
注意apache对网站及PHP的正确配置。特别注意配置文件中LoadModule,PHPIniDir,DocumentRoot,ServerRoot,Directory,DirectoryIndex,AddTypeapplication/x-httpd-php等项的配置
安装后mysql后(管理员账号密码:admin/admin),在PHP代码中使用admin连接数据库失败,cmd执行mysql?uroot-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连接错误出现的情况大有减少,出错后自我恢复的能力大有提高。
针对以上两种情况,分别对安装了webshield1.08与未安装webshield1.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
相关文章
- MySQL 证书:拥有它,奠定职业成功之路(mysql证书)
- 了MySQL: 无法正常启动(mysql起不来)
- C语言连接MySQL数据库实现快速网络查询(c链接mysql数据库)
- MySQL 数据库连接——实现快速便捷(mysql数据库连接包)
- 掌握MySQL字符串查询技巧(mysql查询字符串)
- 配置MySQL:配置路径与环境变量(mysql路径)
- 绿色版MySQL:更清洁、更高效(绿色版mysql)
- Mac连接MySQL远程服务器的步骤(mac远程mysql)
- MySQL读取BLOB:实现文件存储与访问(mysql读取blob)
- 使用Android实现连接MySQL数据库:实现快速数据交互与管理(android连接mysql数据库)
- MySQL正版:正确选择,最高品质保障(mysql 正版)
- MySQL远程连接指南:解决跨网络问题(mysql 如何远程连接)
- MySQL延迟库:优化数据库性能的好帮手(mysql延迟库)
- 如何建立MySQL数据连接?(mysql数据连接)
- MSSQL连接MySQL:一段技术挑战的历程(mssql 连mysql)
- C语言实现MySQL数据库连接(c 中连接mysql)
- 如何连接CPU与MySQL(cpu怎么连接mysql)
- C语言驱动MySQL失去连接的解决方案(c mysql 链接断开)
- MySQL中的IF函数使用方法详解(mysql中if使用)
- MySQL代理C语言实现快速稳定的数据库连接(c mysql代理)
- 中实现向上取整 MySQL中用CEIL函数实现向上取整(ceil 在mysql)
- 一步一个脚印使用CEF框架完成MySQL集成(c ef框架-mysql)
- 使用CMD连接Mysql数据库(cmd 链接mysql)
- 基于ASP的MySQL数据库连接实现(asp连接数mysql)
- ASP连接MySQL实现更高效率数据库管理(asp读mysql)
- 解决cmd无法启动MySQL的问题(cmd启动不了mysql)
- MySQL全连接操作语法详解(mysql中全连接语法)
- 探究MySQL连接的三种方式(mysql 三个 连接)
- MySQL持续连接的原因和解决方法(mysql一直连接着)
- 如何应对MySQL中一张表条目过多的问题(mysql一张表条目过多)
- MySQL实现两张表的内连接操作(mysql一张表内连接)
- 探究MySQL免费模式背后的盈利模式(mysql不收费怎么盈利)