phpMyAdmin
 sql >> Baza danych >  >> Database Tools >> phpMyAdmin

Rozwiązywanie problemów z serwerem MySQL zniknęło

Możesz być skłonny poradzić sobie z tym problemem poprzez "pingowanie" serwera mysql przed zapytaniem. To jest zły pomysł. Aby dowiedzieć się więcej, sprawdź ten post SO:Czy powinienem pingować serwer mysql przed każdym zapytaniem?

Najlepszym sposobem na rozwiązanie tego problemu jest pakowanie zapytań w try/catch bloki i przechwytywanie wyjątków bazy danych, aby można było je odpowiednio obsłużyć. Jest to szczególnie ważne w długo działających skryptach i/lub skryptach typu demon. Oto bardzo prosty przykład użycia „menedżera połączeń” do kontroli dostępu do połączeń z bazą danych:

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. Ciąg SQL Select nie działa

  2. jak uzyskać zdalny dostęp do phpmyadmina

  3. Całkowite usunięcie phpMyAdmina

  4. Dodawanie indeksu do kolumny w mysql

  5. Nie można zainstalować phpMyAdmin Błąd:konflikty php71w-common z php-common-5.4.16-43.el7_4.1.x86_64