Завершение работы базы данных группы автоматического масштабирования AWS Aurora вызывает проблему с удалением сервера mysql

Я использую AWS Aurora и группы автоматического масштабирования для добавления / удаления ведомых устройств баз данных в зависимости от ЦП. Несколько раз в день я получаю сообщение «Общая ошибка: сервер MySQL 2006 ушел». Я сузил эту проблему до того факта, что при удалении базы данных из группы автоматического масштабирования возникает это исключение. Я использую конечную точку кластера только для чтения в моем файле local.xml в качестве параметра чтения ядра.

Любые идеи о том, как исправить это, чтобы соединение автоматически пыталось переподключиться после того, как было определено, что базы данных больше нет?

Я использую Magento 1.9.2.4


person user2966697    schedule 06.03.2019    source источник
comment
Если вы можете опубликовать свой ПОКАЗАТЬ ГЛОБАЛЬНЫЙ СТАТУС; и ПОКАЗАТЬ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ; и 200 строк с каждой стороны времени события из журнала ошибок, пожалуйста - кто-нибудь попытается помочь.   -  person Wilson Hauck    schedule 06.03.2019
comment
@WilsonHauck, это проблема на стороне клиента. Сервер - реплика - отключился намеренно из-за масштабирования, но клиент не подключается повторно, когда соединение с удаленной репликой потеряно. Реплики чтения в кластере Aurora балансируются по нагрузке с использованием циклического DNS с очень короткими TTL, поэтому ожидается, что попытка повторного подключения к тому же имени хоста будет успешной ... но клиентская сторона, очевидно, не пытается этого сделать.   -  person Michael - sqlbot    schedule 07.03.2019
comment
@ user2966697 Вы обнаружите, что существуют допуски по времени, связанные с вашим AWS Aurora, подключенным к вашим группам автоматического масштабирования, и, возможно, другие факторы, которые следует учитывать после того, как ваши данные станут видимыми.   -  person Wilson Hauck    schedule 07.03.2019


Ответы (1)


Итак, вот мое текущее решение. Я сделал копию lib / Varien / Db / Adapter / Pdo / Mysql.php и создал новый файл app / code / local / Varien / Db / Adapter / Pdo / Mysql.php.

Я изменил функцию запроса как таковую.

изменение:

$result = parent::query($sql, $bind);

to:


$tries = 0;
do {
    $retry = false;
    try {
        $result = parent::query($sql, $bind);
    } catch (Exception $e) {
        // Check to reconnect
        if($tries < 3 && stristr($e->getMessage(), '2006 MySQL server has gone away')) {
            $retry = true;
            $tries++;
            $this->_connection = null;  // Kill the current connection to the scaled out db
            $this->_connect(); // Reconnect to an available db
        } else {
            throw $e;
        }
    }
} while ($retry);
person user2966697    schedule 07.03.2019