Cakephp 3.1 mysql ушел

У меня есть сценарий оболочки, который постоянно работает в цикле.

Он проверяет базу данных на наличие записей и при необходимости изменяет их.

        set_time_limit(0);
        while(true){
            try{
                $this->out(mysql_ping());
                $companies = $this->findCompanies();            
                $companies = $this->reduceCompanies($companies, $rules);
                $this->processCompanies($companies);

            }catch (\Exception $e){
                Log::write('debug', $e->getMessage());
            $this->out($e->getMessage());
            }
        sleep(3);
        }

Проблема, с которой я сталкиваюсь, заключается в том, что этот скрипт работает нормально, но затем случайным образом выдает: «Сервер MySQL 2006 ушел».

     }catch (\Exception $e){
                    if(!mysql_ping()){//tried 
    $this->connection->reconnect();  //also tried
$this->Company->getDatasource()->reconnect();   neither seem to work.
                    }}

Любые предложения, как повторно подключиться к БД?


person Mark    schedule 27.04.2016    source источник
comment
Я столкнулся с аналогичной проблемой, нам нужно добраться до основной причины этого, в идеале этого не должно происходить :(   -  person Deep Singh Baweja    schedule 09.06.2017


Ответы (1)


У меня была аналогичная проблема, когда оболочка работает в бесконечном цикле.

Добавьте использование для ConnectionManager:

use Cake\Datasource\ConnectionManager;

Получить соединение перед циклом:

$connection = ConnectionManager::get('default');

В цикле, незадолго до того, как вам впервые понадобится подключение, проверьте, все еще ли вы подключены, и выполните подключение, если вы отключены:

if(!$connection->isConnected()) {
    $connection->connect();
}

Если ваша оболочка находится в состоянии ожидания в течение более длительного времени, вы можете попытаться вручную отключиться и выполнить новое подключение, когда вам снова понадобится подключение:

if($connection->isConnected()) {
    $connection->disconnect();
}
person Sven-Eric Matthes    schedule 15.07.2016