MySQL desaparece quando picos de volume de tráfego

2

Eu tenho 2 servidores executando um website. O servidor nº 1 é dedicado ao Apache, servindo os arquivos do site para a Internet. O servidor nº 2 é dedicado ao MySQL, servindo o banco de dados para o servidor nº 1. Gigabit ethernet conecta os dois servidores.

O problema que estou tendo é com o Servidor # 2, quando o tráfego sobe, faz com que o MySQL desapareça e sou forçado a reiniciar o MySQL para colocar a coisa de volta online novamente. Quando alcançamos muito tráfego on-line, as páginas simplesmente param e todos recebem uma tela de erro do banco de dados.

Acho que o arquivo my.cnf não é discado corretamente e precisa ser otimizado.

Ambos os servidores são idênticos aos servidores Dell PowerEdge, aqui estão as especificações:

  • CPU - Dual Intel Xeon 2.40GHz
  • Memória - 3 GB de RAM
  • Armazenamento - Discos rígidos SCSI 10K de 2x36 GB em RAID 1
  • Linux - versão do kernel do Debian GNU / Linux 4.0 (etch) 2.6.18-6-686 (SMP)
  • Apache v2.2.3
  • PHP 5.2.0-8 + etch16
  • MySQL 5.0.51a-24 + lenny2 + spu1-log
por Daniel 16.07.2010 / 22:12

5 respostas

1

O

link possui um script que fornece alguns parâmetros de ajuste muito básicos. O que seus logs de erro dizem, o servidor realmente falha? As coisas são empurradas para trocar, fazendo com que a máquina funcione de maneira incrivelmente lenta, mas se recuperaria?

tem que esperar para postar, serverfault acha que eu sou um robô.

    
por 17.07.2010 / 01:18
0

Tente aumentar o tamanho máximo de pacote permitido e os valores de tempo limite de espera no lado do servidor

Além disso, talvez o seu servidor de aplicativos tente se conectar ao mysql, mas receba um erro, se assim for, em algum momento ele será colocado na lista negra. Tente executar o mysqladmin flush-hosts em vez de fazer uma reinicialização completa. Se esta ajuda, colocar o comando dentro de um crontab e, em seguida, você terá um tempo para investigar um problema sem paradas em sua produção. Ative todos os logs do lado do cliente e vá.

    
por 16.07.2010 / 23:23
0

(postado como resposta para que eu possa usar formatação)

Poste o seguinte:

grep -vE '^#' /etc/my.cnf
for db in $(mysql -e 'show databases' | sed 1d); do mysql -e 'show table status' $db | awk '{print $2,$5}'; done
mysqlreport

Pegue o mysqlreport de link se você não conseguir o apt-get it.

    
por 17.07.2010 / 00:42
0

Eu suspeito que a variável max_connect_errors no MySQL é preenchida. Por padrão, é apenas 10, depois disso o MySQL começa a rejeitar aquele servidor específico que excedeu o valor max_connect_errors.

Você pode aumentar esse valor temporariamente com SET GLOBAL max_connect_errors='10000' ou mais e permanentemente colocando

max_connect_errors = 10000

para o seu arquivo /etc/mysql/my.cnf (ou onde quer que você o tenha).

    
por 16.08.2010 / 09:14
0

Eu estou supondo que você precisa ajustar corretamente o seu my.cnf. As configurações padrão do MySQL são conservadoras.

Um erro comum que pode estar retardando o seu MySQL é ter seu key_buffer_size definido como valor baixo, que é o tamanho do buffer usado para blocos de índice. Ajustar isso para pelo menos 30% da sua memória RAM ou o processo de re-indexação provavelmente será muito lento.

Por outro lado, registre suas consultas lentas ativando o slow_query_log . Isso registrará todas as consultas que levam mais de dois segundos para serem executadas (isso também pode ser ajustado). Então, dê uma olhada neste log e veja quais consultas podem ser otimizadas. Às vezes, é apenas uma questão de criar um índice.

Você também pode executar show processlist no seu shell MySQL e ver quais consultas continuam aparecendo. Essas consultas também merecem alguma atenção, pois podem ser otimizadas.

Você também pode se beneficiar do cache de consulta do MySQL.

Existem alguns bons scripts disponíveis on-line que podem ajudá-lo a ajustar seu servidor MySQL. O MySQL Tuner é um deles. Siga o link e você também encontrará algumas boas dicas e erros comuns.

Espero que isso ajude!

    
por 07.04.2011 / 00:59