phpMyAdmin
 sql >> Teknologi Basis Data >  >> Database Tools >> phpMyAdmin

Memecahkan server MySQL telah menghilangkan kesalahan

Anda mungkin cenderung untuk menangani masalah ini dengan "ping" server mysql sebelum kueri. Ini adalah ide yang buruk. Untuk lebih lanjut tentang alasannya, periksa posting SO ini:Haruskah saya melakukan ping ke server mysql sebelum setiap kueri?

Cara terbaik untuk menangani masalah ini adalah dengan membungkus kueri di dalam try/catch memblokir dan menangkap pengecualian basis data apa pun sehingga Anda dapat menanganinya dengan tepat. Ini sangat penting dalam skrip tipe daemon yang berjalan lama dan/atau. Jadi, inilah contoh yang sangat mendasar menggunakan "pengelola koneksi" untuk mengontrol akses ke koneksi 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. Apakah jenis dan status kata yang dicadangkan di MySQL?

  2. Kesalahan aneh di phpmyadmin, Berhasil diinstal tetapi masih tidak berfungsi

  3. Mengapa tabel CHARSET diatur ke utf8mb4 dan COLLATION ke utf8mb4_unicode_520_ci

  4. Bagaimana cara mengaktifkan mysqli dengan wampserver?

  5. docker-compose:mariadb - Koneksi ditolak