Я выполнил репликацию главный-подчиненный для выполнения зеркалирования веб-сервера. Веб-содержимое воспроизводится правильно. Но я столкнулся с проблемой репликации базы данных. База данных реплицируется, и ведомое устройство также может читать позицию главного журнала. Я видел различные блоги и видел ошибки пропуска как решение, но это плохо для нашей среды, так как теряет согласованность базы данных. Я попытался сделать подчиненное устройство доступным только для чтения, используя read-only = 1 в подчиненной базе данных my.cnf, но это не сработало. Мне просто интересно, как данные таблицы базы данных дублируются даже после выполнения новой репликации.
Ошибка:
Last_Error: Ошибка «Повторяющаяся запись« 155251 »для ключа« PRIMARY »» в запросе. База данных по умолчанию: ...............
Это сообщение означает, что запись, которую вы пытаетесь вставить, уже присутствует на ведомом устройстве.
Прежде всего, посмотрите на главные файлы журнала, если ошибка существует. В этом случае проблема не на уровне репликации.
Итак, если ошибка отсутствует на главном устройстве, вам следует повторить цикл дампа / восстановления.
Для обеспечения согласованности вам необходимо прекратите запись ( SET GLOBAL read_only = 1; ) на ведущем устройстве, пока вы дампите все базы данных. Когда дамп будет выполнен, вы можете отключить read_only. Убедитесь, что вы включили - single-transaction --add-drop-database --master-data в качестве параметров для mysqldump.
- add-drop-database: удалить базу данных на ведомом устройстве перед восстановлением . Так как не осталось ничего, что могло бы нарушить согласованность
- мастер-данные: включить мастер-файл и главную позицию. Нет необходимости вставлять его вручную
Не забудьте START SLAVE; после того, как будет выполнено восстановление на ведомом устройстве!
Надеюсь, это поможет;)