>  Q&A  >  본문

php - 如何解决msyql语句链接超时?

我用thinkphp框架
在命令行模式下
写了一个死循环
我要保证我的逻辑操作
永远不会中断
而且每秒执行一次
代码如下

public function index()
{
    $redis   = new \Redis\Redis();//实例化redis
    $redis_res = $redis -> ping();
    if ($redis_res !== 'PONG') {
        error_log('/tmp/1.log', $e->getMessage());
    }
    $abb = M('abb');//实例化
    $i   = 0;
    while(true) {
        //用来处理链接数据库超时 方法1
        $i++;
        if ($i >= 1000) {
            $i = 0;
            $abb = M('abb');
        }
        
        //////////逻辑操作///////////           
        try {
            $result1 = $abb->add(array('a' => 'abc'));//操作数据库
        }  catch (\Exception  $e) {
          error_log('/tmp/2.log', $e->getMessage());
        }
        try {
            $result2 = $redis -> Lpush('abc',$result1);//操作redis
        }  catch (\Exception  $e) {
          error_log('/tmp/3.log', $e->getMessage());
        }
        //////////逻辑操作///////////
        sleep(1);
    }
}

但是有一个问题 我这个链接数据库时间过长会MySQL会自动断掉
2006:MySQL server has gone away
wait_timeout默认是8小时,
去增加wait_timeout 也不是长久之计,
所以我想执行1000次时重新M('abb') ,但好像还是不行,重新M('abb')不是重新练=链接数据库吗?

有没有其他解决方案?
如何保证我的链接数据库不会中断?
redis操作有链接超时的问题吗?
求指导!

为情所困为情所困2691일 전698

모든 응답(3)나는 대답할 것이다

  • 某草草

    某草草2017-05-16 13:12:50

    매번 데이터베이스에 다시 연결하는 것이 가장 좋습니다. 귀하의 오류는 링크 손실로 인해 발생할 수 있습니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-05-16 13:12:50

    데이터베이스와 너무 다르지 않도록 데이터베이스와 관련된 c3p0의 매개변수 값을 조정하세요 wait_timeout

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-16 13:12:50

    mysql_ping 함수를 사용하여 연결 여부를 확인하세요.

    으아아아

    회신하다
    0
  • 취소회신하다