`

MySQL连接超时关闭问题解决

 
阅读更多

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;
        }
    }

}
?>

 

分享到:
评论

相关推荐

    Qt 多线程连接数据库——数据库连接池

    * 数据库连接池特点: * 获取连接时不需要了解连接的名字,连接池内部维护连接的名字... * 当无可用连接时,获取连接的线程会等待一定时间尝试继续获取,直到取到有效连接或者超时返回一个无效的连接 * 关闭连接很简单

    mysql连接过多和死掉以及拒绝服务的解决方法

    mysql连接过多导致总是死掉,后来网上搜索发现此文自Mysql 5.x的某个版本之后,Mysql的自动关闭空闲连接的特性修改了,如果一个连接空闲到超时时间(默认28000秒8小时),再次发起的Reconnect重新连接请求不会被...

    Linux连接池LCP.zip

    例如Mysql连接服务等),包括服务器端超时关闭连接的情况(比如http反向代理情况,nginx反向代理),需要配置使用具体的IP和端口号来预先派生连接,连接使用一次之后会自动关闭。 别名:(kconnp, Kernel-based ...

    mysql数据库my.cnf配置文件

    # MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,...

    基于MySQL的数据库中间件Meituan-DBProxy.zip

    解决在分表情况下,返回值有 NULL 的情况下,查询超时的问题 此问题是DBProxy在多个分表merge结果的过程中未处理 NULL 值,导致结果集返回不对,而JDBC接口会认为此种情况下是未收到结果,会处于一直等待状态,...

    MySQL管理之道 性能调优、高可用与监控.part2.rar

    《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql优化、性能参数调优、mydumper逻辑、xtrabackup热备份与恢复、...

    MySQL_错误代码以及出错信息对照大全

    MySQL_错误代码以及出错信息对照: 0101 属于其他进程的专用标志。 0102 标志已经设置,无法关闭。 0103 无法再次设置该标志。 0104 中断时无法请求专用标志。 0105 此标志先前的所有权已终止。 0106 请...

    PHP和MySQL Web开发第4版pdf以及源码

    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登录缓慢的解决方法

    这是由于ssh服务和mysql服务默认都会在登录时进行DNS反向解析的过程,而内网通常我们没有配备DNS服务,那么这时就只能等这些服务自己超时,然后才能允许我们的登录通过,解决方案也很简单,只要关闭相应服务的解析就...

    PHP和MySQL WEB开发(第4版)

    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连接池

    #连接超时时间阀值,获取连接时,超出阀值时间,则获取失败,毫秒为单位 bonecp.connectionTimeout = 10000 #连接池助手线程数量,可设置为0,该参数会降低运行速度,但程序有大量连接时,有助于提升高并发程序的...

    CoonnectionStabilizer:Mysql等的长效连接稳定器-开源

    一些数据库,例如Mysql,完全没有注意到超时关闭连接。 将 Connection.java 更改为 ConnectionStabilizer.java 并忘记这些问题。

    PHP和MySQL Web开发第4版

    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 每次读取一行...

    Go MySQL Driver:用于 Go 的 (golang) 数据库/sql 包的 MySQL 驱动程序-开源

    需要 db.SetConnMaxLifetime() 以确保在 MySQL 服务器、操作系统或其他中间件关闭连接之前驱动程序安全关闭连接。 由于一些中间件会在 5 分钟后关闭空闲连接,我们建议超时时间短于 5 分钟。 此设置也有助于负载...

    易语言ADO类1.33模块

    易语言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源码,ADO类1.33,是否创建,新建Ac库,新建Ac表1,新建Ac表,连接Excel,连接Excel2007,连接SQLite,连接MySQL,连接SQLServer,连接,连接Access,连接Access2007,关闭库,执行SQL语句,执行SQL,取得权限,设置...

    【分布式事务----LCN】LCN原理及使用方式.docx

    TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。 对于代理连接池的优化 自动超时...

    java高并发秒杀系统.rar

    # 连接超时时间,默认30000(30秒) connection-timeout: 30000 # 测试连接是否可用的查询语句 connection-test-query: SELECT 1 #Mybatis-plus配置 mybatis-plus: #配置Mapper.xml映射文件 mapper-locations...

    mssqlx:数据库客户端库,任何主从服务器的代理,主主机结构。 轻巧,高性能和自动平衡

    当检测到由DBMS的超时策略引起的错误连接时,自动重试select/get/query查询,该策略会自动关闭非交互式/超时连接。 自动健康检查。 有关api的更多详细信息,请参阅 安装 go get -u github.com/linxGnu/mssqlx ...

    nginx_upstream_check_module-master.zip

    该指令可以配置一个连接发送的请求数,其默认值为1,表示Tengine完成1次请求后即关闭连接。 Syntax: check_http_send http_packet Default: "GET / HTTP/1.0\r\n\r\n" Context: upstream 该指令可以配置http健康...

Global site tag (gtag.js) - Google Analytics