Я сделал репликацию master-slave для зеркалирования веб-сервера. Веб-содержимое воспроизводится правильно. Но я столкнулся с проблемой репликации базы данных. База данных реплицируется, и ведомое устройство также может читать позицию главного журнала. Я видел различные блоги и видел ошибки пропуска как решение, но это плохо для нашей среды, поскольку теряет согласованность базы данных. Я попытался сделать подчиненное устройство доступным только для чтения, используя read-only = 1 в подчиненной базе данных my.cnf, но это не сработало. Мне просто интересно, как данные таблицы базы данных дублируются даже после выполнения новой репликации.
Ошибка:
Last_Error: Ошибка "Повторяющаяся запись" 155251 "для ключа" PRIMARY "в запросе. База данных по умолчанию: ...............
Это сообщение означает, что запись, которую вы пытаетесь вставить, уже присутствует на ведомом устройстве.
Прежде всего, посмотрите файлы главного журнала, если ошибка существует. Если это так, проблема не на уровне репликации.
Итак, если на мастере ошибки нет, следует повторить цикл дампа / восстановления.
Чтобы обеспечить последовательность, вам нужно прекратить писать ( УСТАНОВИТЬ ГЛОБАЛЬНЫЙ read_only = 1;) на мастере, пока вы сбрасываете все базы данных. Когда дамп будет выполнен, вы можете отключить read_only. Убедитесь, что вы включили - single-transaction --add-drop-database --master-data как опции для mysqldump.
--add-drop-database: удалить базу данных на ведомом устройстве перед восстановлением. Так как не осталось ничего, что могло нарушить последовательность
--master-data: включить мастер-файл и главную позицию. Не нужно вставлять вручную
Не забудь НАЧАТЬ РАБ; после того, как часть восстановления на ведомом будет выполнена!
Надеюсь, это поможет;)