Tenho uma pergunta sobre a exclusão de logs binários no ambiente de replicação:
Temos um ambiente com 1 mestre e 2 escravos (executando o mysql 5.5). Às vezes, encontramos problemas de espaço durante tempos de processamento intensos, nos quais o diretório bin log fica cheio. Os logs expiram a cada 3 dias. Eu queria saber, existe uma razão pela qual os logs devem ser mantidos por 3 dias em todas as caixas - mestre e ambos os escravos? Faria sentido, por exemplo, manter registros por 3 dias em um mestre, mas por 1 dia em escravos? Qual é a melhor maneira de fazer isso?
Obrigado!
Respostas:
ESCRAVO
Se os seus escravos não são mestres, os escravos não precisam de log binário. Você pode limitar a quantidade de espaço do log de retransmissão acumulado por um escravo. Para acelerar os logs de retransmissão em 4G, adicione
relay_log_space_limit
/etc/my/.cnf em cada Escravoe reinicie o mysql
Se você não pode definir isso, pelo menos deve ter algum tipo de alerta
SHOW SLAVE STATUS\G
e verificar o valor deRelay_Log_Space
(total de bytes consumidos pelos logs de retransmissão).MESTRE
Quanto ao Mestre, você pode definir
expire_logs_days
como 1, mas há um aviso severo que tenho para você ...Se a replicação for interrompida, você terá 1 dia para corrigi-la. Caso contrário, um log binário no mestre poderá girar para longe e você não poderá executar nenhum comando CHANGE MASTER TO para realinhar a replicação. Eu sairia
expire_logs_days
às 3 no Mestre.SUGESTÃO # 1
Se você tiver algum processamento em massa durante a noite, talvez deva executar os processos em massa no Master
SET SQL_LOG_BIN=0;
no início da sessão. Obviamente, isso não será replicado para o Escravo. Você pode executar a mesma carga em massa em paralelo aos dois escravos.SUGESTÃO # 2
Outra coisa que você pode fazer para gerenciar a acumulação de logs binários principais é isso.
Corra
SHOW SLAVE STATUS\G
em ambos os escravos. Olhe paraRelay_Master_Log_File
. Isso representa o log binário no mestre cujo último comando foi executado no escravo.Neste exemplo, Relay_Master_Log_File é mysql-bin.009590. Todos os logs binários anteriores a este podem ser removidos do Master. Você pode executar isso no Master:
Isso apagará os logs mais antigos e ainda deixará a replicação intacta.
EMBARGO
Logs binários são arquivos que compilam serialmente (como uma fila FIFO) todas as transações SQL concluídas como uma instrução SQL ou uma alteração de linha. Um log de retransmissão é um arquivo que coleta entradas de log binárias de um servidor remoto (também conhecido como Mestre).
Na replicação do MySQL
Se você fizer failover para um escravo e quiser torná-lo um mestre
log-bin=mysql-bin
ao /etc/my.cnf no SlaveVocê precisará configurar a replicação de outros escravos para o mestre recém-promovido e garantir que os dados no escravo correspondam ao mestre recém-promovido
ATUALIZAÇÃO 13-08-2012 17:47 EDT
De acordo com a opção Documentação
relay-log
do MySQL , você deve defini-la. Aqui está o porquê:fonte