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连接过多导致总是死掉,后来网上搜索发现此文自Mysql 5.x的某个版本之后,Mysql的自动关闭空闲连接的特性修改了,如果一个连接空闲到超时时间(默认28000秒8小时),再次发起的Reconnect重新连接请求不会被...
例如Mysql连接服务等),包括服务器端超时关闭连接的情况(比如http反向代理情况,nginx反向代理),需要配置使用具体的IP和端口号来预先派生连接,连接使用一次之后会自动关闭。 别名:(kconnp, Kernel-based ...
# MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,...
解决在分表情况下,返回值有 NULL 的情况下,查询超时的问题 此问题是DBProxy在多个分表merge结果的过程中未处理 NULL 值,导致结果集返回不对,而JDBC接口会认为此种情况下是未收到结果,会处于一直等待状态,...
《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...
MySQL_错误代码以及出错信息对照: 0101 属于其他进程的专用标志。 0102 标志已经设置,无法关闭。 0103 无法再次设置该标志。 0104 中断时无法请求专用标志。 0105 此标志先前的所有权已终止。 0106 请...
2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行...
这是由于ssh服务和mysql服务默认都会在登录时进行DNS反向解析的过程,而内网通常我们没有配备DNS服务,那么这时就只能等这些服务自己超时,然后才能允许我们的登录通过,解决方案也很简单,只要关闭相应服务的解析就...
2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets...
#连接超时时间阀值,获取连接时,超出阀值时间,则获取失败,毫秒为单位 bonecp.connectionTimeout = 10000 #连接池助手线程数量,可设置为0,该参数会降低运行速度,但程序有大量连接时,有助于提升高并发程序的...
一些数据库,例如Mysql,完全没有注意到超时关闭连接。 将 Connection.java 更改为 ConnectionStabilizer.java 并忘记这些问题。
2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行...
需要 db.SetConnMaxLifetime() 以确保在 MySQL 服务器、操作系统或其他中间件关闭连接之前驱动程序安全关闭连接。 由于一些中间件会在 5 分钟后关闭空闲连接,我们建议超时时间短于 5 分钟。 此设置也有助于负载...
易语言ADO类1.33模块源码,ADO类1.33模块,是否创建,新建Ac库,新建Ac表1,新建Ac表,连接Excel,连接Excel2007,连接SQLite,连接MySQL,连接SQLServer,连接,连接文件,连接Access,连接Access2007,关闭库,执行SQL语句,执行SQL...
易语言ADO类1.33源码,ADO类1.33,是否创建,新建Ac库,新建Ac表1,新建Ac表,连接Excel,连接Excel2007,连接SQLite,连接MySQL,连接SQLServer,连接,连接Access,连接Access2007,关闭库,执行SQL语句,执行SQL,取得权限,设置...
TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。 对于代理连接池的优化 自动超时...
# 连接超时时间,默认30000(30秒) connection-timeout: 30000 # 测试连接是否可用的查询语句 connection-test-query: SELECT 1 #Mybatis-plus配置 mybatis-plus: #配置Mapper.xml映射文件 mapper-locations...
当检测到由DBMS的超时策略引起的错误连接时,自动重试select/get/query查询,该策略会自动关闭非交互式/超时连接。 自动健康检查。 有关api的更多详细信息,请参阅 安装 go get -u github.com/linxGnu/mssqlx ...
该指令可以配置一个连接发送的请求数,其默认值为1,表示Tengine完成1次请求后即关闭连接。 Syntax: check_http_send http_packet Default: "GET / HTTP/1.0\r\n\r\n" Context: upstream 该指令可以配置http健康...