Autor: Shuixian
Os procedimentos e funções armazenados do MySQL 5.1 funcionam na replicação?
Sim, o comportamento padrão é executado em procedimentos armazenados e funções que são replicados do servidor MySQL mestre para o servidor escravo.
Os procedimentos armazenados e funções criados no servidor mestre podem ser copiados para o servidor escravo?
Sim, procedimentos armazenados e funções executadas através de instruções DDL gerais, cuja criação no servidor mestre são copiadas para o servidor escravo, portanto o alvo existirá em ambos os servidores. As instruções ALTER e DROP para procedimentos e funções armazenados também são replicadas.
Como ocorre o comportamento nos procedimentos e funções armazenados replicados?
O MySQL registra cada evento DML que ocorre em procedimentos e funções armazenados e replica essas ações individuais para servidores escravos. As chamadas reais para procedimentos e funções armazenados não são copiadas.
Há algum requisito especial de segurança para usar procedimentos armazenados, funções e replicação juntos?
Sim, como um escravo tem permissão para executar qualquer instrução que leia o log binário do mestre, existem restrições de segurança especificadas para procedimentos armazenados e funções usadas com replicação. Se a replicação ou o registro binário estiverem habilitados em geral (para fins de recuperação pontual), então o DBA MySQL terá duas opções de segurança disponíveis:
Qualquer usuário que queira criar procedimentos armazenados deve receber privilégios SUPER.
Alternativamente, um DBA pode definir a variável de sistema log_bin_trust_routine_creators como 1, o que permitirá que qualquer pessoa com permissões padrão CREATE ROUTINE crie procedimentos e funções armazenados.
Quais são as restrições ao comportamento de cópia de procedimentos e funções armazenados?
Linhas indeterminadas (aleatórias) ou baseadas em tempo incorporadas em procedimentos armazenados não são copiadas corretamente. Os resultados gerados aleatoriamente, pela sua própria natureza, são previsíveis e não podem ser clonados de forma confiável. Portanto, o comportamento aleatório replicado para o escravo não irá espelhar o que ocorre no mestre. Observe que declarar um procedimento armazenado ou função DETERMINISTIC ou definir a variável do sistema como 0 em log_bin_trust_routine_creators permitirá que operações de valor aleatório sejam chamadas.
Além disso, o comportamento baseado em tempo não é reproduzível no servidor escravo porque tal comportamento baseado em tempo não é reproduzível no procedimento armazenado através do log binário usado para replicação, porque o log binário registra apenas eventos DML e não inclui restrição de tempo.
Finalmente, se ocorrer um erro em uma tabela não interativa durante uma grande ação DML (como uma inserção em massa), a tabela não interativa poderá sofrer replicação e o servidor mestre poderá ser parcialmente atualizado a partir da ação DML na versão replicada. da tabela não interativa. Mas por causa do erro ocorrido, não houve atualização no servidor escravo. Para o comportamento DML da função, o espaço de trabalho será executado com a palavra-chave IGNORE para que as atualizações que causam erros no servidor mestre sejam ignoradas e as atualizações que não causam erros sejam copiadas para o servidor escravo.