phpMyAdmin
 sql >> база данни >  >> Database Tools >> phpMyAdmin

Решаването на MySQL сървъра е изчезнало грешките

Може да сте склонни да се справите с този проблем, като "пингувате" на mysql сървъра преди заявка. Това е лоша идея. За повече информация защо вижте тази публикация SO:Трябва ли да пингувам mysql сървъра преди всяка заявка?

Най-добрият начин за справяне с проблема е чрез обвиване на заявки в try/catch блокове и улавяне на всякакви изключения от базата данни, така че да можете да ги обработвате по подходящ начин. Това е особено важно при продължителни скриптове и/или скриптове от тип демон. И така, ето един много основен пример за използване на "мениджър на връзки" за контрол на достъпа до DB връзки:

class DbPool {

    private $connections = array();

    function addConnection($id, $dsn) {
        $this->connections[$id] = array(
            'dsn' => $dsn,
            'conn' => null
        );
    }

    function getConnection($id) {
        if (!isset($this->connections[$id])) {
            throw new Exception('Invalid DB connection requested');
        } elseif (isset($this->connections[$id]['conn'])) {
            return $this->connections[$id]['conn'];
        } else {
            try {
                // for mysql you need to supply user/pass as well
                $conn = new PDO($dsn);

                // Tell PDO to throw an exception on error
                // (like "MySQL server has gone away")
                $conn->setAttribute(
                    PDO::ATTR_ERRMODE,
                    PDO::ERRMODE_EXCEPTION
                );
                $this->connections[$id]['conn'] = $conn;

                return $conn;
            } catch (PDOException $e) {
                return false;
            }
        }
    }

    function close($id) {
        if (!isset($this->connections[$id])) {
            throw new Exception('Invalid DB connection requested');
        }
        $this->connections[$id]['conn'] = null;
    }


}


class Crawler {

    private $dbPool;

    function __construct(DbPool $dbPool) {
        $this->dbPool = $dbPool;
    }

    function crawl() {
        // craw and store data in $crawledData variable
        $this->save($crawledData);
    }

    function saveData($crawledData) {
        if (!$conn = $this->dbPool->getConnection('write_conn') {
            // doh! couldn't retrieve DB connection ... handle it
        } else {
            try {
                // perform query on the $conn database connection
            } catch (Exception $e) {
                $msg = $e->getMessage();
                if (strstr($msg, 'MySQL server has gone away') {
                    $this->dbPool->close('write_conn');
                    $this->saveData($val);
                } else {
                    // some other error occurred
                }
            }
        }
    }
}


  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. phpmyadmin, neginx error.log - Проверете, че групата www-data има достъп за четене и open_basedir

  2. Как да стартирате конкретна sql заявка за всеки ред в таблицата?

  3. Как да добавя каскада за изтриване и ограничаване на актуализиране с помощта на phpmyadmin?

  4. Избор на топ 10 заплати на служителите

  5. Възникна фатална грешка в JavaScript. Искате ли да изпратите доклад за грешка? на phpmyadmin