Eu tenho replicação em execução no Percona Server 5.5 seguindo este guia e me pergunto se devo 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 estou usando principalmente o escravo para obter mysqldumps e, em caso de emergência, reconfigurá-lo para ser mestre, então não acredito que precisamos (ou deveríamos) ativar a gravação em constantemente?
Quando um Slave é somente leitura , ele não está 100% protegido do mundo.
De acordo com a documentação do MySQL em
read-only
Assim, qualquer um com privilégio SUPER pode ler e escrever à vontade em tal Slave...
Certifique-se de que todos os usuários não privilegiados não tenham o privilégio SUPER.
Se você quiser revogar todos os privilégios SUPER de uma só vez, execute isso no Master e Slave:
Com referência ao Slave, isso reservará o privilégio SUPER para apenas
root
e impedirá que os não privilegiados façam gravações das quais seriam restritos.ATUALIZAÇÃO 2015-08-28 17:39 EDT
Acabei de saber recentemente que o MySQL 5.7 apresentará super_read_only .
Isso vai parar os usuários SUPER em suas trilhas porque os Docs 5.7 dizem
Sim, é melhor você executar servidores escravos com modos R/O disponíveis. Usuários com privilégios anteriores podiam modificar os dados de tal escravo de qualquer maneira, mas depois 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 imprópria que poderia efetivamente tornar o escravo inutilizável devido a dados simples ou coisas como conflito de chaves que interromperiam a replicação (não mais escravo real novamente).
Há também software usado para orquestração/divisão de carga que levaria em consideração o status de R/O dos servidores em pools que eles configuraram para roteamento de solicitações adequado entre esses servidores.
Isso é segurança. Use-o.
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. Por que é um problema? Porque quase todos os DBAs MySQL usam seus slaves no RO, para evitar corrupção de dados, e sempre existe um dba que acidentalmente roda de forma errada um SQL que modifica os dados em um slave, ou um app que não vai alterar sua conf. Se eu quiser escrever em slaves, pois tem vários esquemas e preciso fazer escritas nesse esquema, então oread_only
comando deve ser mais inteligente, e vamos fazer umread_only for schema
. Isso pode ser muito útil em servidores multimestres e escravos que fazem um arquivoReplicate_Ignore_DB
. Então, por enquanto, você deve fazer o controle manualmente e ter muito cuidado.Apreciar.