2014-11-18 4 views
2

У меня есть база данных экземпляров amazon rds, и я использую прочитанную реплику для аналитики. Тем не менее, каждую неделю или около того прочитанная реплика падает с ошибкой репликации. Я пробовал смотреть состояние подчиненного устройства и пропускать ошибки репликации в соответствии с этой статьей справки (http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_skip_repl_error.html), однако я смог восстановить ее только путем прокрутки и создания новой прочитанной реплики. Однако это становится проблематичным по нескольким причинам, поскольку внешние службы зависят от исходной прочитанной реплики.Amazon RDS Read Replica - пропуская ошибки репликации

Основная база данных в порядке, но, похоже, некоторые ошибки целостности приводят к сбою чтения и не восстанавливаются.

В настоящее время моего чтения реплика имеет следующие параметры:

Replication State: Error 
Replication Error: Error 'Cannot add or update a child row: a foreign key constraint fails..... 

Есть ли способ я могу настроить это прочитать реплики, чтобы пропустить все ошибки? Я просто пытаюсь понять, как сделать его более стабильным. Благодаря!

ответ

2

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

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

У вас нет реальной альтернативы, кроме как создать новый экземпляр реплики и отказаться от старого. Если на новой появляется ошибка репликации, остановите, выясните причину и исправьте все, что происходит неправильно в вашей конфигурации или приложении, чтобы вызвать ошибки.

Пропуск ошибок репликации в RDS для MySQL должен рассматриваться только как мера аварийного останова, если у вас нет полного понимания внутренних функций репликации MySQL ... потому что в правильной настройке они редки.

+0

Спасибо, что ответ здесь. Мы использовали MyISAM, а не InnoDB, и я думаю, что это является источником проблемы.У нас все еще нет исправления, потому что мы переключились на MyISAM по другим причинам. – jkeesh

1

Оказывается, источник проблемы связан с двигателями хранения. Из амазонки часто задаваемые вопросов: http://aws.amazon.com/rds/faqs/#130

Amazon RDS для MySQL реплик для чтения требует транзакционного хранения двигателя и поддерживается только для двигателя хранения InnoDB. Non-транзакционные системы хранения MySQL, такие как MyISAM, могут помешать Прочитайте Реплики из работы по назначению. Однако, если вы все еще выбираете использовать MyISAM с репликами для чтения, мы рекомендуем вам смотреть Amazon CloudWatch «Replica Лаг» метрику (доступную через AWS Management консоль или Amazon CloudWatch APIs) тщательно и воссоздать Read реплику должны он отстает из-за ошибок репликации. Те же соображения относятся к использованию временных таблиц и любых других транзакционных двигателей .

Мы использовали MyISAM. Однако мы перешли из таблиц InnoDB по другим причинам. Таким образом, мы не имеем здесь никакого ответа, потому что, по-видимому, системы хранения InnoDB дают нам одну проблему, и MyISAM занимается другим. Нам придется погрузиться глубже, чтобы понять это, но, похоже, нам нужен механизм транзакционного хранилища, чтобы читать реплики работали последовательно и правильно.