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 исчез" Я попытался поместить некоторые вещи в ловушку исключения для повторного подключения к серверу mysql, например:

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

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

1 ответ

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

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

use Cake\Datasource\ConnectionManager;

Получите соединение до цикла:

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

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

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

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

if($connection->isConnected()) {
    $connection->disconnect();
}
Другие вопросы по тегам