16.4.1.27 Ошибки репликации на реплике во время репликации
Если оператор генерирует одну и ту же ошибку (идентичный код ошибки) как на источнике, так и на реплике, ошибка записывается в журнал, но репликация продолжается.
Если оператор генерирует разные ошибки на источнике и реплике, поток репликации SQL завершается, и реплика записывает сообщение в свой журнал ошибок и ожидает, пока администратор базы данных решит, что делать с ошибкой. Это включает в себя случай, когда оператор генерирует ошибку на источнике или реплике, но не на обоих. Чтобы решить проблему, подключитесь к реплике вручную и определите причину проблемы. SHOW SLAVE STATUS для этого полезно. Затем исправьте проблему и выполните START SLAVE. Например, вам может потребоваться создать несуществующую таблицу, прежде чем вы сможете запустить реплику снова.
Если временная ошибка записывается в журнал ошибок реплики, вам не обязательно выполнять какие-либо действия, предложенные в сообщении об ошибке. Временные ошибки должны обрабатываться клиентом путем повторной попытки транзакции. Например, если поток репликации SQL записывает временную ошибку, связанную с тупиком, вам не нужно вручную перезапускать транзакцию на реплике, если поток репликации SQL впоследствии не завершится с сообщением об ошибке, не являющейся временной.
Если такое поведение проверки кода ошибки нежелательно, некоторые или все ошибки могут быть замаскированы (игнорированы) с помощью опции --slave-skip-errors.
Для нетранзакционных движков хранения, таких как MyISAM, возможно, что оператор только частично обновит таблицу и вернёт код ошибки. Это может произойти, например, при многострочном вставлении, когда одна строка нарушает ограничение ключа, или если оператор long update убит после обновления некоторых строк. Если это происходит на источнике, реплика ожидает, что выполнение оператора приведёт к тому же коду ошибки. Если это не так, поток репликации SQL останавливается, как описано ранее.
Если вы копируете данные между таблицами, использующими разные движки хранения на источнике и реплике, имейте в виду, что один и тот же оператор может генерировать разные ошибки при запуске на одной версии таблицы, но не на другой, или может вызывать ошибку для одной версии таблицы, но не для другой. Например, поскольку MyISAM игнорирует ограничения внешних ключей, оператор INSERT или UPDATE, обращающийся к таблице InnoDB на источнике, может вызвать нарушение внешнего ключа, но тот же оператор, выполненный на таблице MyISAM версии реплики, не вызовет такой ошибки, что приведёт к остановке репликации.
© 2025 Oracle
Licensed under the GPLv2 License.