2008-08-27 4 views
11

Я запускаю систему репликации двоичного журнала MySQL-хозяина-хозяина (phew!), Которая для некоторых данных не синхронизирована (что означает, что ведущий хранит больше данных, чем подчиненный). Но подчиненный останавливается очень часто при малейшей ошибке MySQL, может ли это быть отключено? (возможно, параметр my.cnf для репликации ошибок-репликаций ведомых ошибок или некоторых из них;))Репликация двоичного журнала MySQL: может ли он быть установлен, чтобы игнорировать ошибки?

Это то, что происходит, время от времени, когда ведомое устройство пытается реплицировать элемент, который не существует , раб просто умирает. быстрая проверка на SHOW SLAVE STATUS \ G; дает

 Slave-IO-Running: Yes 
     Slave-SQL-Running: No 
     Replicate-Do-DB: 
      Last-Errno: 1062 
      Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table (FIELDS) VALUES (VALUES)' 

, который я быстро исправить (когда я понимаю, что раб был остановлен), выполнив следующие действия:

STOP SLAVE; 
RESET SLAVE; 
START SLAVE; 

... в последнее время это было получить вид утомительно, и перед Я выплюнул какой-то PHP, который делает это для меня, мне было интересно, есть ли какая-то запись my.cnf, которая не будет убивать подчиненный при первой ошибке.

Приветствия,

/Тпл

+0

«СБРОС СЛАВЯ» снова начнет репликацию с самого начала. Одна и та же ошибка для одной и той же строки должна появиться рано или поздно по пути справа ... тогда, как она решила ваши проблемы. – Uday 2012-05-10 13:50:45

ответ

11

Да, с -slave-skip-errors = xxx в my.cnf, где xxx - это «все» или список кодов ошибок запятой.

+4

Яркое предупреждение о том, что это может повредить вашу рабочую базу данных. Это ошибки по какой-то причине. :) – Riedsio 2010-12-01 12:30:13

+0

в my.cnf, я считаю, что вы разместили это без ведущих «-». – TheSatinKnight 2017-05-01 22:51:25

3

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

Во-вторых, я думаю, что ошибка, которую вы получаете, это не когда вы копируете элемент, который не существует (что бы это значило?) - похоже, вы копируете элемент, который уже существует в базе данных подчиненных.

Я подозреваю, что проблема в основном возникает из-за того, что она не начинается с чистой копии данных. Кажется, что мастер был скопирован на раба; то репликация была отключена (или не удалась); и затем он снова начал работать, но не давал рабу шанс догнать то, что он пропустил.

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

1

У современных команд mysqldump есть несколько вариантов, помогающих в настройке последовательной репликации. Проверьте --master-data, который поместит файл двоичного журнала и положение в дампе и автоматически установится при загрузке в подчиненный. Кроме того, --single-transaction будет выполнять дамп внутри транзакции, чтобы блокировка записи не требовалась для последовательного дампа.

+0

Стоит отметить, что -single-transaction используется только для транзакционных таблиц, таких как InnoDB. – 2012-05-14 21:00:04

1

Если ведомое устройство не используется для каких-либо записей, отличных от репликации, авторы High Performance MySQL рекомендуют добавить 0ABна подчиненный сервер, чтобы пользователи не ошибочно меняли данные на подчиненном устройстве, поскольку это также создаст тот же ошибки, которые вы испытали.

0

я думаю, что вы делаете репликацию с синхронизацией из базы данных первого синхронизировать базу данных и попробовать для репликации и серверы генерируют одинаковые уникальные идентификаторы и попытаться установить автоматическое incerment смещение

15

остановки ведомого; установить глобальный sql_slave_skip_counter = 1; запустить раб;

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

 Смежные вопросы

  • Нет связанных вопросов^_^