Temos alguns servidores de banco de dados MySQL configurados com replicação baseada em linhas, para desempenho. O software grava no mestre e lê do mestre ou do escravo. Tudo está funcionando muito bem, na maior parte.
Entendo que o MySQL permitirá gravações para o escravo, mesmo sabendo que é um escravo do MySQL. Idealmente, eu gostaria de fechar isso, portanto, mesmo que alguém escreva algum código incorreto que obtenha uma conexão de leitura e faça um UPDATE
, isso gera um erro em vez de colocar dados no escravo.
Existe uma maneira de fazer isso no MySQL? Obviamente, também gostaríamos de tornar isso impossível em nosso software, mas como um firewall em nossos servidores, eu gostaria de ser o mais defensivo possível.
Obrigado!
Como alternativa à configuração
read_only=1
(por exemplo, quando existem outros bancos de dados de scratchpad / relatório / desenvolvimento na instância escrava), às vezes retiro todos os privilégios, exceto SELECT, de todos os usuários para o banco de dados que estou replicando.Ou seja, depois de executar o comando GRANT no mestre, eu executo o comando REVOKE no escravo.
fonte
A partir do MySQL 5.7.8 , agora existe uma
super_read_only
opção que impede até mesmo os usuários SUPER de executar atualizações de clientes. Não interrompe o processo de replicação. Como em outras configurações, ele pode ser definido:--super_read_only=ON
),super_read_only=1
) ouSET GLOBAL super_read_only = 1;
).Observe que:
super_read_only
implicitamenteread_only
read_only
desativa implicitamentesuper_read_only
Algumas advertências:
read_only
nemsuper_read_only
impedirá operações em tabelas temporárias.super_read_only
ativado foram relatados.Referência: https://www.percona.com/blog/2016/09/27/using-the-super_read_only-system-variable/
fonte
Como o primeiro post sugere, você faz isso com permissões. A opção somente leitura não funciona para superusuários como FYI e também não é realmente uma solução viável para um escravo no qual você deseja impedir gravações. Você precisa impedir gravações com permissões de usuário / banco de dados / tabela. Por um lado, o usuário de replicação ainda deve poder gravar no escravo para mantê-lo sincronizado com o mestre. A melhor maneira de controlar as gravações é a necessidade de revogar opções que permitam gravações (ou seja, inserções, cria etc.) para o usuário em questão que deveria fazer leituras apenas no escravo.
fonte
Conceda apenas direitos relacionados à replicação para os usuários no escravo. Você ainda tem o problema de direitos de usuário root, mas pode remover o acesso root remoto ao servidor DB.
fonte