Desejo criar um procedimento/evento armazenado para fazer algumas tarefas de manutenção. Minhas configurações são mestre/escravo configuradas para cenários de failover (o que significa que o escravo não é usado para geração de relatórios, apenas pode ser promovido em caso de falha do mestre primário).
Eu gostaria que este procedimento armazenado fosse executado no agendador de eventos em ambos. Durante o curso normal da operação, gostaria que ele fizesse isso e deixasse essas operações fluírem pela cadeia normal de replicação. No caso de failover, gostaria apenas de detectar que não é o mestre e continuar o trabalho no que era anteriormente o escravo. (Menos coisas com que se preocupar durante um evento como esse).
Eu estava pensando em envolver a chamada inicial em um bloco de pseudocódigo que parecia
se I_AM_MASTER então
chamar real_work_sp;
fim se;
Qual é a melhor maneira de testar I_AM_MASTER? Sei que posso mostrar o status do mestre na linha de comando, mas não tenho certeza de como capturar isso para fins deste teste. Como eu faria isso, ou existe uma maneira melhor?
PS As operações não são apenas exclusões, eu poderia simplesmente deixar "cair" se elas fossem executadas duas vezes.
Isso funcionará se o mestre tiver um escravo conectado
Se a resposta for...
Você também pode verificar a variável de status global 'Slave_running'
Se a resposta for...
Você também pode verificar a lista de processos para 'usuário do sistema'
Se a resposta for...
Espero que essas perguntas lhe dêem alguma direção.
EMBARGO
SHOW MASTER STATUS;
apenas informa qual é o log binário atual. Se seus escravos tiverem logs binários desativados,SHOW MASTER STATUS;
não retorne nada. Não há como capturar isso no banco de dados information_schema.A única maneira óbvia é
SHOW SLAVE STATUS\G
ATUALIZAÇÃO 30/12/2011 12:50 EDT
Aqui está uma maneira simples de identificar seu mestre de seus escravos: Crie uma tabela cujo único objetivo seja manter os nomes dos servidores que compõem seu mestre. Execute esses comandos em todos os seus servidores de banco de dados (mestres e escravos)
Agora basta executar esta consulta para determinar se é um Master:
Aqui está uma amostra executada no meu PC usando o MySQL 5.5.12
De uma chance !!!
ATUALIZAÇÃO 30/12/2011 13:06 EDT
Aqui está a função armazenada que você precisará:
Aqui está uma amostra de chamada:
ATUALIZAÇÃO 30/12/2011 13:12 EDT
Apenas lembra-te