19.5.1.30 Ошибки репликации на реплике во время репликации
Если оператор генерирует одну и ту же ошибку (одинаковый код ошибки) как на источнике, так и на реплике, ошибка регистрируется, но репликация продолжается.
Если оператор генерирует разные ошибки на источнике и реплике, поток SQL репликации завершается, и реплика записывает сообщение в свой журнал ошибок и ожидает, пока администратор базы данных решит, что делать с ошибкой. Это включает случай, когда оператор генерирует ошибку на источнике или реплике, но не на обоих. Для решения проблемы подключитесь к реплике вручную и определите причину проблемы. SHOW REPLICA STATUS для этого полезно. Затем исправьте проблему и выполните START REPLICA. Например, вам может потребоваться создать несуществующую таблицу, прежде чем вы сможете снова запустить реплику.
Если в журнале ошибок реплики зафиксирована временная ошибка, вам не обязательно выполнять какие-либо действия, предложенные в цитируемом сообщении об ошибке. Временные ошибки должны обрабатываться клиентом путем повторной попытки транзакции. Например, если поток SQL репликации записывает временную ошибку, связанную с тупиком, вам не нужно вручную перезапускать транзакцию на реплике, если поток SQL репликации не завершится с сообщением о не временной ошибке.
Если такое поведение проверки кода ошибки нежелательно, некоторые или все ошибки могут быть скрыты (проигнорированы) с помощью параметра --replica-skip-errors.
Для нетранзакционных движков хранения, таких как MyISAM, возможно, что оператор только частично обновит таблицу и вернет код ошибки. Это может произойти, например, при многострочном вставлении, если одна строка нарушает ограничение ключа, или если длинный оператор обновления убивается после обновления некоторых строк. Если это произойдет на источнике, реплика ожидает, что выполнение оператора приведет к тому же коду ошибки. Если этого не произойдет, поток SQL репликации остановится, как описано ранее.
Если вы выполняете репликацию между таблицами, которые используют разные движки хранения на источнике и реплике, имейте в виду, что один и тот же оператор может генерировать различную ошибку при запуске на одной версии таблицы, но не на другой, или может вызвать ошибку для одной версии таблицы, но не для другой. Например, поскольку MyISAM игнорирует ограничения внешних ключей, оператор INSERT или UPDATE, обращаясь к таблице InnoDB на источнике, может вызвать нарушение внешнего ключа, но тот же оператор, выполненный на версии MyISAM той же таблицы на реплике, не приведет к такой ошибке, что приведет к остановке репликации.
Правила фильтрации репликации применяются в первую очередь, прежде чем выполнять какие-либо проверки привилегий или формата строк, что позволяет отфильтровать любые транзакции, которые не прошли проверку; для транзакций, которые были отфильтрованы, проверки не выполняются, и, следовательно, ошибки не генерируются. Это означает, что реплика может принять только ту часть базы данных, к которой данному пользователю предоставлен доступ (при условии, что любые обновления в этой части базы данных используют формат репликации на основе строк). Это может быть полезно при выполнении обновления или при миграции в систему или приложение, которые используют административные таблицы, к которым пользователь входящей репликации не имеет доступа. См. также Раздел 19.2.5, «Как серверы оценивают правила фильтрации репликации».
© 2025 Oracle
Licensed under the GPLv2 License.