Я почесываю голову, пытаясь понять, что вызывает прерывистую ошибку в моем скрипте. Ошибка: SQLSTATE [HY000]: Общая ошибка: 2006 Сервер MySQL ушел.
Мой скрипт ниже является частью функции, которая выполняет завиток, получает некоторые значения из ответа JSON и затем записывает их в таблицу. Я бы сказал, что 80% времени он отлично работает, а затем остальные 20%, я убираю сервер. Я не смог определить какие-либо тенденции, которые приводят к ошибке, это просто кажется случайным. Любые идеи, почему я могу получить эту ошибку? спасибо, что проверили это
... //post via cURL $ch = curl_init( $url ); $timeout = 500; curl_setopt( $ch, CURLOPT_POST, 1); curl_setopt( $ch, CURLOPT_POSTFIELDS, $myvars); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt( $ch, CURLOPT_HEADER, 0); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1); $this->response = curl_exec( $ch ); $this->json_decoded = json_decode($this->response); $this->full = print_r($this->json_decoded, true); $client_leadid = $this->json_decoded->Parameters->lead_id; $client_status = $this->json_decoded->Status; $length = curl_getinfo($ch); curl_close($ch); //record in DB $insert = $this->full.' | '.$url.' | '.$myvars.' | '.$this->date . ' | Time Taken: '.$length['total_time']; $db->exec("UPDATE table SET client_resp = '$insert' WHERE global_id = '$this->leadid' LIMIT 1"); $db->exec("UPDATE table SET client_leadid = '$client_leadid' WHERE global_id = '$this->leadid' LIMIT 1");
Вероятно, это происходит потому, что ваш запрос CURL занимает больше времени, чем таймаут соединения mysql
либо 1) установить тайм-аут запроса для CURL, чтобы он быстрее умирал от ошибок (CURLOPT_CONNECTTIMEOUT предназначен только для соединений – CURLOPT_TIMEOUT – для общей длины запроса, и он остановится, если сервер не ответит вовремя) 2) тайм-ауты тайм-аута mysql, чтобы предотвратить отключение сервера от вас, чтобы не отправлять запросы
3) обнаружить ошибку и автоматически подключиться к mysql
mysql> show variables like "%timeout%"; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | connect_timeout | 5 | | delayed_insert_timeout | 300 | | innodb_lock_wait_timeout | 50 | | interactive_timeout | 28800 | | net_read_timeout | 30 | | net_write_timeout | 60 | | slave_net_timeout | 3600 | | table_lock_wait_timeout | 50 | | wait_timeout | 28800 | +--------------------------+-------+ 9 rows in set (0.00 sec)
wait_timeout и interactive_timeout – это те, о которых вы заботитесь