melhor prática para corrigir o erro de log de consulta lenta do mysql 13

6

CentOS 5.5 MySQL 5.5 instalado através de um repositório yum

[ERROR] Could not use /var/log/mysqld.slow.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it.

Usando uma instalação padrão do MySQL 5.5 (especificamente do repositório webtatic), o log de consultas lentas não pode começar a gravar de fato devido a um problema de permissão. Se eu pré-criar uma cópia e chown pertencer ao usuário: mysql e group: mysql, então tudo funcionará bem.

No mesmo diretório ( /var/log ), não há problemas em criar e efetuar o login em mysql.log e mysql.error.log.

Obviamente eu tenho uma correção rápida, mas eu gostaria de poder usar o logrotate nele, sem precisar que o logrotate também repita o hackery. (A única coisa pior que hackery é ter que repetir hackery.)

Alguém sabe qual é a melhor prática para corrigir isso?

    
por comb 10.06.2011 / 07:01

2 respostas

4

Parece que o processo mysql ( mysqld_safe , eu acredito) é incapaz de criar o arquivo de log após você usar o logrotate para movê-lo para fora do caminho e enviar um HUP? Se eu estiver bem aqui, me avise.

Supondo que eu não esteja fora, há algumas opções aqui:

  • Mova o log para um diretório de propriedade do mesmo usuário que o processo mysqld_safe. Por exemplo, crie um diretório /var/log/mysqld/ e salve os arquivos de log lá. Se o diretório é mysql: mysql 700, então novos arquivos podem ser criados sem um problema.
  • Use o método copy / truncate logrotate em vez do método move / SIGHUP. O método copy / truncate copiará os arquivos de log atuais ( mysqld.slow.log ) para um novo arquivo ( mysqld.slow.log.1 ) e truncará o arquivo original para zero bytes. Isso é útil se você não quiser interromper o processo que está gravando no log por algum motivo. A desvantagem, é claro, é que há sobrecarga de disco adicional ao copiar o arquivo original para um novo arquivo antes de limpar o arquivo original de volta para zero bytes. Isso é feito adicionando a opção copytruncate à sub-rotina logrotate desse arquivo e removendo a seção postrotate não mais necessária.
por 10.06.2011 / 15:12
1

Você também pode usar a opção de criação de logrotate para criar o arquivo de log depois de girar o arquivo de log antigo. A única coisa que você precisará depois disso é um script postrotate que chame mysqladmin flush-logs (lembre-se -u e -p se você tiver um nome de usuário / senha que deseja usar para manutenção). Isso deve economizar a sobrecarga da duplicação do arquivo de log no caso de ficar grande.

De qualquer forma, deve ser bom: criar ou copiar o truncamento. Além dos requisitos de espaço, não sei de nenhuma vantagem de um sobre o outro.

    
por 06.08.2011 / 06:56