Как восстановить соединение в php adodb после исключений: сервер Mysql пропал или потерял соединение с сервером MySQL во время запроса

У меня проблема в одном из моих заданий cron, иногда я получаю сообщение об ошибке, например: MySQL сервер отсутствует, а иногда теряется соединение с MySQL сервером во время запроса По случайному запросу. Я использовал ADODB, и подключился к базе данных с помощью функции:

function connectDatabase()
{
   $this->database = NewADOConnection(DSN);
   $this->database->SetFetchMode(ADODB_FETCH_ASSOC); 
}

и в работе cron я делаю что-то подобное:

    while($arrRow = $result->fetchRow()){
        try {
            /*
            Some MySQL query's (~10 query's)
            */
        } catch(Exception $e){
            print $e->getMessage();
            print "\n";
            print $e->getTraceAsString();
            $this->connectDatabase();
        }
    }

В этом цикле я пытаюсь обновлять записи одну за другой с помощью простых и быстрых запросов. Но вчера я уловил эту ошибку:

mysql error: [2013: Lost connection to MySQL server during query] in EXECUTE("UPDATE item 
            SET
                item.price = 10.00,
                WHERE item.item_id = 145383")

#0 ../public_html/includes/adodb/adodb.inc.php(879): adodb_throw('mysql', 'EXECUTE', 2013, 'Lost connection...', 'UPDATE item ...', false, Object(ADODB_mysql))
#1 ../public_html/includes/adodb/adodb.inc.php(854): ADOConnection->_Execute('UPDATE item ...', false)
#2 ../public_html/class/Updater.class.php(208): ADOConnection->Execute('UPDATE item ...')
#3 ../public_html/class/Updater.class.php(74): Updater->updatePrice('145383', Array, 0)
#4 ../public_html/pricejob.php(14): Updater->start()

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

#5 {main}PHP Fatal error:  Uncaught exception 'ADODB_Exception' with message 'mysql error: [2006: MySQL server has gone away] in CONNECT(..., '...', '****', ...)
' in .../public_html/includes/adodb/adodb-exceptions.inc.php:76
Stack trace:
#0 .../public_html/includes/adodb/adodb.inc.php(426): adodb_throw('mysql', 'CONNECT', 2006, 'MySQL server ha...', '...', '...', Object(ADODB_mysql))
#1 .../public_html/includes/adodb/adodb.inc.php(3770): ADOConnection->Connect('...', '...', '...', '...')
#2 .../public_html/includes/adodb/adodb.inc.php(3653): ADONewConnection('mysql://...')
#3 .../public_html/class/Database.php(64): NewADOConnection('mysql://...')
#4 .../public_html/class/Updater.class.php(82): Database->connectDatabase()
#5 .../public_html/pricejob.php(14): Updater->start()
#6 {main}
  thrown in .../public_html/includes/adodb/adodb-exceptions.inc.php on line 76

Я знаю только одно, что я получил это исключение, когда мне нужно циклически> 25k строк в цикле. Как справиться с этим для меня? как вернуть сервер при этих ошибках?

1 ответ

mysql_connect не работает во второй раз

mysql_connect не заботится, было ли соединение разорвано или истекло время ожидания, оно никогда не соединится во второй раз, если вы не вызовете его с параметром new_link со значением true,

mysql_connect($server,$username,$password,true);
Другие вопросы по тегам