MySQL无法连接问题的位置和修复过程。

结果如下:

客户环境:
Windows服务器2003 R2标准版SP2
MySQL 14.12版本分布5.0.18,Win32(IA32)
Apache 2.2
上升
WebShield客户端1.08

这个问题已经回来了。它可以进行优化,也不能确定它是由WebShield。

环境建设:
Windows服务器2003 R2标准版SP2
MySQL 5.0.18 Win32
apache-2.2.21-win32-x86-no_ssl
php-5.2.17-win32-vc6-x86
红星23.00.50.25

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

下载Apache和PHP时,请注意Apache和PHP匹配的问题。

一)PHP5.3有一个版本的VC6和VC9,和VC6版本应该选择。原因如下:

I. VC6版本与Visual Studio 6编译器编译的,如果你的PHP是由Apache,那么你选择VC6版本。
II。VC9版本与Visual Studio 2008编译器编译的,如果你的PHP内置IIS,然后你选择VC9版本。

B)的PHP5.3的线程安全和非线程安全的版本。Apache no_ssl版本应与PHP的线程安全的版本相匹配。如果你与非线程安全的,启动Apache犯错:Apache运行线程MPM MPM,但是,它也被称为正确的方法。

线程安全是线程安全的。当执行时,它将执行的线程(线程)的安全检查,防止新线程的CGI执行启动新的需求和消耗系统resources.isapi实现DLL动态库的形式,可按用户要求进行的,在一个用户的请求不会立即消失,所以对线程安全检测的需要,以提高程序的效率,所以如果是执行PHP ISAPI,建议选择安全的版本;
II。非线程安全的是非线程安全的和不执行的线程(线程)安全检查时executing.fastcgi执行操作在一个线程,因此不需要线程安全检查。而不是线程安全检查,它可以提高执行效率。因此,如果FastCGI是用来执行PHP,非线程安全版本推荐。
注意Apache的网站和PHP配置正确,特别注意以LoadModule,phpinidir,DocumentRoot,ServerRoot,目录,保存配置,应用程序/ x-httpd-php AddType等项目在配置文件
安装后,MySQL(管理员帐户密码:admin),PHP代码中的管理连接数据库失败,CMD执行MySQL U - P,root已启用,root可以正常连接数据库。

问题的再现:

PHP的最长执行时间限制。

a)PHP的最长执行时间为30秒,超过30秒后终止,连接到MySQL也断开。
B)试图增加这个值,修改PHP目录的配置文件,并改变max_execution_time = 30 max_execution_time = 300。如果设置为0,这表明PHP的最大执行时间不限。
(c)避免由于最长执行时间限制而导致MySQL连接失败。

大的Web流量导致MySQL无法连接。

(a)编写PHP脚本来测试MySQL,发现当MySQL经常连接/断开操作时,MySQL很快就会出现无法连接的问题(错误代码:10048)。当所有连接停止时,MySQL在2分钟后恢复正常。如果连接未停止,MySQL就无法连接。
B)从两个方面进行优化:
修改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 系统 CurrentControlSet 服务 TCPIP 参数}
TCPTimedWaitDelay= DWORD值:000000 1e
MaxUserPort= DWORD值:00008000