• MySQL异常处理


    跑数据流程这几天总是出错,暂时还没有精力重构,先处理一些紧急的问题吧。鉴于目前问题都出在MySQL执行查询出错的情况,决定对mysql_query进行封装。封装函数如下。

    目前只处理2006错误,对于1317错误,只有重试的方法,以后再补充。

    对于2006错误,需要重连MySQL,但是有一点需要注意的是,在重连之前一定要先关闭之前的连接,否则永远报2006错误

    之前没写过异常处理,try{}catch(){},嘿嘿,用了一下就会了。

    /**
     * @param $sql 需要执行的SQL语句
     * @param $link 数据库连接
     * @param $conn 使用线上还是线下数据库,默认为线下 online:线上 offline:线下
     */
    function dh_mysql_query($sql, &$link=null, $db) {
        $i = 0;
        do{
            try{
                $ret = mysql_query($sql);
                if(!$ret){
                    //抛出MySQL错误号
                    $ec = mysql_errno();
                    throw new Exception($ec);
                }
            }catch(Exception $e){
                //处理mysql错误号
                switch($e->getMessage()){
                    case '2006':// MySQL Server has gone away
                        mysql_close($link);
                        if($db == "online"){
                            $link = connect_online();
                        }else {
                            $link = conn_db();
                        }
                        break;
                    case '1317'://Query execution was interrupted
                        sleep(3);
                        break;
                }
            }
            $i ++;
        }while(!$ret && $i<5);
    
        if(!$ret){
            $ec = mysql_errno();
            $err = mysql_error();
            $desc = json_encode(array('event'=>'mysql query error','sql'=>$sql,'errno'=>$ec,'errmsg'=>$err,'debug_info'=>debug_backtrace(true)));
            write_log($desc);
            //curl_send_msg('13691102775',$desc);
            //exit($desc);
        }
        return $ret;
    }
    

      以后再补充针对MySQL其他错误的处理方式

  • 相关阅读:
    Poj(1459),最大流,EK算法
    Poj(3259),SPFA,判负环
    HDU(3790),最短路二级标准
    Poj(2349),最小生成树的变形
    CSUFT2016训练赛
    NYOJ(21),BFS,三个水杯
    Poj(3687),拓扑排序,
    Poj(2367),拓扑排序
    HDU(1856),裸的带权并查集
    HDU(1572),最短路,DFS
  • 原文地址:https://www.cnblogs.com/xiongji/p/3663085.html
Copyright © 2020-2023  润新知