Eu tenho a replicação em execução no Percona Server 5.5 seguindo este guia e me perguntei se eu deveria adicionar read-only=1
ao meu escravo my.cnf
para torná-lo somente leitura?
O guia configura a replicação para a tabela mysql para que os usuários sejam replicados, mas eu estou usando principalmente o slave para usar o mysqldumps, e em uma emergência reconfigurando-o para ser mestre, então não acredito que precisamos (ou devíamos) habilitar a gravação ativada no constantemente?
Respostas:
Quando um escravo é somente leitura , ele não é 100% protegido contra o mundo.
De acordo com a documentação do MySQL em
read-only
Assim, qualquer pessoa com privilégio SUPER pode ler e escrever à vontade para um Escravo ...
Verifique se todos os usuários não privilegiados não possuem o privilégio SUPER.
Se você deseja revogar todos os privilégios SUPER de uma só vez, execute isso no Master e Slave:
Com referência ao Escravo, isso reservará o privilégio SUPER para
root
justificar e impedir que os não privilegiados façam gravações das quais seriam restringidos.UPDATE 2015-08-28 17:39 EDT
Acabei de aprender recentemente que o MySQL 5.7 apresentará super_read_only .
Isso interromperá os usuários SUPER, porque os 5,7 documentos dizem
fonte
Sim, é melhor executar servidores escravos com os modos de R / O disponíveis. Usuários anteriormente privilegiados podiam modificar os dados de um escravo de qualquer maneira, mas posteriormente eles também obtiveram seu "botão" de restrição de R / O.
Por que é importante - é melhor falhar com a gravação do que se arrepender com uma gravação incorreta que poderia efetivamente tornar o escravo inutilizável devido a simples confusão de dados ou coisas como conflito de chaves que interromperiam a replicação (não é mais um escravo real de novo).
Também há software usado para orquestração / divisão de carga que levaria em consideração o status de E / S dos servidores nos pools configurados para o roteamento de solicitações adequado entre esses servidores.
Isso é segurança. Use-o.
fonte
O problema aqui, incluído o MySQL 8.0, é que o MySQL não o força a definir
read_only = ON
quando você executa ostart slave
comando. Porque é um problema? Como quase todos os DBAs do MySQL usam seus escravos no RO, para impedir a corrupção de dados, e sempre existe um dba que acidentalmente executa erroneamente um SQL que modifica os dados em um escravo ou um aplicativo que não muda seu conf. Se eu quiser escrever em escravos, porque ele tem vários esquemas e preciso escrever nesse esquema, então oread_only
comando deve ser mais inteligente e vamos fazer aread_only for schema
. Isso pode ser muito útil em servidores multi-master e escravos que fazem aReplicate_Ignore_DB
. Portanto, por enquanto, você deve fazer o controle manualmente e ter muito cuidado.Apreciar.
fonte