mysql 无法连接问题的定位和修复过程分享

定位结果如下:

客户环境:
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

(0)

相关推荐

  • IPv6设置后如何解决MySQL无法连接localhost的问题

    使用phpmyadmin或者navicat链接数据库时提示[客户端软件无法连接localhost] 经检查发现是IPV6地址监听了3306端口,而客户端软件不支持IPV6. 新开的系统或者配置过IPV6的操作系统,然后手动安装的MYSQL数据库或者护卫神安装的数据库会出现此问题,平常使用的破解版的一键包不会出现这个问提. 一般手动安装的数据库中没有bind-address = 0.0.0.0这个参数,护卫神的数据库中有这个函数,但是注释的!只需要添加或者去掉这个注释后,重启数据库即可! 然后使用

  • 远程无法连接SQL2000及MySQL的原因和解决办法

    1. 没有在数据库管理面板中设置远程连接IP造成的. 说明:为了提高操作系统的安全性,所有使用了星外安全包的用户,在导 入ipsec策略后,SQL2000所使用的1433端口及MySQL使用的3306 端口就会自动被关闭.如果您需要在不同的服务器之间连接数据 库,您就需要在数据库管理面板中设置远程连接IP才能远程连接数 据库. 解决办法:您的数据库用户如果需要远程连接服务器的1433或3306端口, 您应该让这个用户自己登陆[星外虚拟主机管理平台]的用户 区,点数据库管理,点数据库面板中的设置远

  • KB967723造成MySQL频繁无法连接

    原因:微软9月9日发布了TCP/IP更新补丁(KB967723),如果服务器开启自动更新或者有自动更新软件下载更新了这个补丁,那么就会出现这个问题.有人可能会问,为什么9号出现的补丁,到现在才发现问题?大家都知道,服务器不是每天都重启的,有的服务器可能一个月或者一年半载重启一次,有的可能在9月9日以后重启过服务器,所以补丁生效了(我个人这么认为). 症状: Can't connect to MySQL server on 'localhost' (10061) 解决方案: 老方法:卸载KB967

  • php无法连接mysql数据库的正确解决方法

    即使连接Mysql的语句正确,php也无法连接mysql数据库,出现如下图所示的结果: 首先是在Apache服务器的conf/httpd.conf下的任意位置都没有:PHPIniDir "php压缩目录"这一项. 如"C:/php-5.4.43-Win32-VC9-x86是php的压缩目录,应该有PHPIniDir "C:/php-5.4.43-Win32-VC9-x86" 之后,需要把php压缩目录,与php压缩目录/ext添加到环境变量Path值中.

  • MYSQL无法连接 提示10055错误的解决方法

    解决方法:(以下内容为本人亲自实践原创) 总结一下,应该是连接数的问题,那么服务器上有些什么连接数: 1.IIS网站服务器中各个网站中有"连接超时时间","会话超时时间": 2.其它程序占用的服务器连接数(如SMTP服务在发信出去的时候可能有很多个连接数) 3.服务器本身的TCP/IP连接数,如xp系统就有个限制,不过server 2003系统似乎没这个限制. 解决操作: 1.我的服务器上面有几个网站,其中有个网站有个自动发信的功能,用"netstat -

  • php后台经常提示无法连接mysql 刷新后又可以访问的解决方法

    网上一共提供了两种方法: 第一种:卸载KB967723补丁登录服务器,进入控制面板 - 添加和删除程序 - (勾选上方的"显示更新")在里面可以看到更新的KB967723这个补丁,然后就想卸载普通软件一样卸载,卸载中会提示你,如果卸载可能导致程序运行出错,没关系,选择"是",继续卸载.卸载完成后重启数据库服务器. 第二种:修改注册表本方法是微软给出的修改注册表修复该Bug的的方法,原因是默认最大的临时 TCP 端口的数是 5000 适用于一节中包含的产品中. 在这些

  • mysql 无法连接问题的定位和修复过程分享

    定位结果如下: 客户环境:windows server 2003 r2 standard edition sp2mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)apache 2.2瑞星webshield客户端1.08 问题已复现.可以优化,无法确定是webshield导致的. 搭建环境:windows server 2003 r2 standard edition sp2mysql 5.0.18 for win32apache-2.2.21-win

  • mysql配置连接参数设置及性能优化

    目录 1 前言 2 数据库连接配置信息 3 配置信息说明 4 数据库sql 5 mysql 性能优化的关注点 6 硬件和操作系统方面的优化 7 架构设计方面的优化 8 mysql 程序配置优化. 9 sql 执行层面优化 10 最终总结 1 前言 在java开发中,最常用的数据存储就是数据库,其中常用的就是mysql,关于数据库的连接配置信息,可能就不是那么的清除了,这里做一个配置信息的说明. 2 数据库连接配置信息 jdbc:mysql://localhost:3306/database_na

  • MYSQL 左连接右连接和内连接的详解及区别

    MYSQL 左连接右连接和内连接的区别,这里就对这些概念经过一个实例,讲解清楚. 代码如下: drop table table1; CREATE TABLE `andrew`.`table1` ( `name` VARCHAR(32) NOT NULL, `city` VARCHAR(32) NOT NULL ) ENGINE = MyISAM; insert into TABLE1(name, city) values ('Person A', 'BJ'); insert into TABLE

  • c++连接mysql数据库的两种方法(ADO连接和mysql api连接)

    第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的SQL语句不太兼容标准SQL语句,需要做一些处理,这里暂时不说.第二种方法只能针对于mysql数据库的连接,不过用这种方法不用安装MyODBC服务器程序. 不管用哪种方法,首先需要安装Mysql数据库,安装方法请看"mysql安装及一些注意点".最好安装一个Navicat for mysql,方便操作mysql数

  • MySQL和连接相关的timeout 的详细整理

    MySQL和连接相关的timeout   前言: 今天同事问为什么查询mysql库时, 在数据量比较大时,会话总断.刚开始以为是mysql的和连接有关timeout的问题,结果是网络的不稳定的原因. 下面总结下和连接有关的timeout slave-net-timeout The number of seconds to wait for more data from the master before the slave considers the connection broken, abo

  • mysql jdbc连接步骤及常见参数

    mysql数据库自不必说,现在很多程序开发应用及站长们常用到,jdbc可能一般会比较陌生一些,jdbc是什么意思?这里也会提到,最主要的是为大家介绍一下,mysql jdbc连接步骤及常见参数详解. jdbc是什么意思? jdbc(java data base connectivity,java数据库连接)是一种用于执行sql语句的javaapi,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成.jdbc提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能

  • Mysql 远程连接配置实现的两种方法

    Mysql 远程连接配置实现的两种方法 大家在公司工作中,经常会遇到mysql数据库存储于某个人的电脑上,大家要想连接mysql服务,装有mysql服务的电脑就必须开启远程连接. 第一种: root@ubuntu:/usr/local/MySQL# mysql -hlocalhost -uroot -proot; mysql>use mysql; mysql>insert into user ( host, user, password, Select_priv, Insert_priv, U

  • MySql二进制连接方式详解

    使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: 复制代码 代码如下: [root@host]# mysql -u root -p Enter password:****** 在登录成功后会出现 mysql> 命令提示窗口,你可以在上面执行任何 SQL 语句. 以上命令执行后,登录成功输出结果如下: Welcome to the MySQL monitor. Commands

  • 浅析mysql交互式连接&非交互式连接

    交互式操作:通俗的说,就是你在你的本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议. 非交互式操作:就是你在你的项目中进行程序调用.比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接.那么这时候就是非交互式操作. 在之前,我基本上不关系这两个属性,都是用的是mysql服务商推荐的默认值,就是8小时. 但是,从昨天开始,由于在新网租用了一个空间,而他的

  • C++利用MySQL API连接和操作数据库实例详解

    1.C++连接和操作MySQL的方式 系列文章: MySQL 设计和命令行模式下建立详解 C++利用MySQL API连接和操作数据库实例详解 在Windows平台,我们可以使用ADO.ODBC或者MySQL API进行连接和操作.ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的一个用于存取数据源的COM组件.它提供了程序语言和统一数据访问方式OLE DB的一个中间层,也就是Microsoft提出的应用程序接口(API)用以实现访问关系或非关

随机推荐