PS:原创文章,如需转载,请注明出处,谢谢!
本文地址:http://flyer0126.iteye.com/blog/2346265
1、应用程序(比如PHP)长时间的执行批量的MYSQL语句。
最常见的就是采集或者新旧数据转化。
SHOW VARIABLES LIKE '%timeout%’
解决方案:
在my.ini文件中添加或者修改以下两个变量:
wait_timeout=2880000
interactive_timeout = 2880000
关于两个变量的具体说明可以google或者看官方手册。
如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...)
2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。
比如,图片数据的处理
SHOW VARIABLES LIKE '%max_allowed_packet%’
解决方案:
在my.cnf文件中添加或者修改以下变量:
max_allowed_packet = 10M (也可以设置自己需要的大小)
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。
3、检查MySQL的链接状态,使其重新链接
<?php // 数据库操作类 class DB{ // 保存数据库连接 private static $_instance = null; // 连接数据库 public static function get_conn($config){ if(isset(self::$_instance) && !empty(self::$_instance)){ return self::$_instance; } $dbhost = $config['host']; $dbname = $config['dbname']; $dbuser = $config['user']; $dbpasswd = $config['password']; $pconnect = $config['pconnect']; $charset = $config['charset']; $dsn = "mysql:host=$dbhost;dbname=$dbname;"; try { $h_param = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ); if ($charset != '') { $h_param[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . $charset; //設置默認編碼 } if ($pconnect) { $h_param[PDO::ATTR_PERSISTENT] = true; } $conn = new PDO($dsn, $dbuser, $dbpasswd, $h_param); } catch (PDOException $e) { throw new ErrorException('Unable to connect to db server. Error:' . $e->getMessage(), 31); } self::$_instance = $conn; return $conn; } // 执行查询 public static function query($dbconn, $sqlstr, $condparam){ $sth = $dbconn->prepare($sqlstr); try{ $sth->execute($condparam); } catch (PDOException $e) { echo $e->getMessage().PHP_EOL; self::reset_connect($e->getMessage()); // 出错时调用重置连接 } $result = $sth->fetchAll(PDO::FETCH_ASSOC); return $result; } // 重置连接 public static function reset_connect($err_msg){ if(strpos($err_msg, 'MySQL server has gone away')!==false){ self::$_instance = null; } } } ?>
相关推荐
在描述中提到的解决方案是通过调整MySQL的配置来解决8小时空闲后连接超时的问题。有两种方法: 1. 修改启动参数: 在启动MySQL服务时,可以添加`--interactive_timeout=288000`参数,将交互式连接的超时时间设置为...
这篇文档将深入探讨MySQL连接驱动jar包的相关知识点,包括其作用、安装与配置、使用方法以及常见问题。 首先,了解MySQL连接驱动的作用。当Java程序需要访问MySQL数据库时,必须加载对应的JDBC驱动,即mysql-...
MySQL的`wait_timeout`连接超时问题通常出现在长时间无操作的数据库连接上,服务器会自动关闭这些连接以释放资源。这种现象在应用中可能导致突然的数据通信中断,表现为“Communications link failure”等错误,提示...
`Pomelo`是社区维护的MySQL Entity Framework Core提供者,而`MySql.Data`则是官方提供的非Entity Framework解决方案。 2. 配置连接字符串 在应用程序配置文件(如appsettings.json)中,配置MySQL数据库的连接...
网上找了很多解决办法,几乎没有一个能完美解决问题的,大体都是首先执行一段query后看返回结果,但这个办法也太无用和耗费资源了吧...因为断开后isOpen和isValid都会返回true,所以不能从这里入手...
MySQL连接池在Java应用开发中扮演着至关重要的角色,它是一种管理数据库连接的机制,能够有效地提高数据库操作的性能和效率。在这个项目中,我们看到的是一个纯手工编写的Java源码实现,不依赖任何外部数据库驱动,...
以下是一些解决多线程下MySQL连接数过多问题的方法和策略: 1. **连接池管理**: 使用连接池(如C3P0、HikariCP、Druid等)是解决这个问题的关键。连接池能够复用已建立的数据库连接,避免频繁地创建和销毁连接,...
6. **应用层处理异常**:在应用代码中捕获并处理因连接超时引起的异常,当发生这类异常时,尝试重新获取连接。 总之,处理JavaEE应用中的MySQL空闲关闭问题需要综合考虑数据库服务器的配置、连接池的管理策略以及...
在高并发的Web应用中,频繁地创建和销毁数据库连接会消耗大量系统资源,增加延迟,而连接池通过复用已建立的数据库连接来解决这个问题。下面我们将深入探讨MySQL连接池的相关知识点。 1. **连接池原理**: 连接池...
MySQL数据库连接池是提高应用程序性能的一种重要技术,它允许开发者管理多个数据库连接并高效地复用这些连接,而不是每次需要时都创建新的连接。在C#编程中,我们可以使用自定义的连接池或者第三方库如ADO.NET的...
总的来说,解决MySQL Sleep连接过多问题需要从源头上找出原因,通过优化程序、调整服务器配置以及定期监控来改善数据库性能。同时,了解并掌握MySQL的连接管理机制对于预防此类问题的发生至关重要。
线程池和MySQL连接池是两种重要的资源管理技术,在多线程编程和数据库操作中扮演着关键角色。本文将详细探讨这两个概念,并结合在Ubuntu 12.04环境下使用C++实现线程池和MySQL连接池的方法。 线程池是一种优化并发...
本资源包含了一个可编译运行的C++ MySQL连接池示例,这对于理解和实践C++中的数据库管理是非常有价值的。 首先,连接池的概念是这样的:它是一组预先初始化的数据库连接,程序在需要时可以从池中获取一个已存在的...
一、MySQL连接方式 1. 命令行连接:通过终端或命令提示符输入`mysql -u username -p`,然后输入密码,可以直接连接到MySQL服务器。 2. 图形化工具连接:例如MySQL Workbench、phpMyAdmin、Navicat等,提供直观的界面...
MySQL连接池是数据库管理中的一个重要概念,主要用于优化数据库应用程序的性能和效率。它是一组预先建立的数据库连接,这些连接可以被多个用户或线程共享,而不是为每次数据库操作都创建新的连接。这样做的好处是...
标题 "Mybatis破MySql8小时断线问题1" 指的是在使用Mybatis框架与MySQL数据库交互时遇到的一个常见问题,即由于MySQL数据库的连接超时机制导致的8小时断线。描述中提到,当数据库连接闲置时间超过MySQL默认设定的8...
`SqlHelper`类可能是一个通用的SQL操作助手类,而`ConnPool`类则可能是实现MySQL连接池的类。 `SqlHelper`类可能包含以下功能: 1. 提供SQL语句执行的方法,如执行查询、更新、插入等操作。 2. 包含事务管理功能,...
以下是对MySQL连接数据库涉及的知识点的详细说明: 1. **连接方式**: - **命令行客户端**:这是最基础的连接方式,通过MySQL的命令行界面输入SQL语句与数据库交互。 - **图形化界面工具**:如MySQL Workbench、...
此外,由于MySQL服务器通常不在本地运行,所以需要处理网络延迟和连接超时问题。可以设置合适的连接超时和读写超时参数,如下所示: ```java Properties props = new Properties(); props.setProperty("connect...