Home / Softwares / MySQL / MySQL Blog

Neste último sábado, dia 13 de março do ano de 2010, a EAC Software realizou o primeiro de uma nova série de eventos, denominada Sintonize. Uma idéia do departamento de marketing juntamente com a diretoria da empresa para trazer ao conhecimento dos membros da equipe (hoje com quase 60 funcionários internos) as novidades relacionadas com o ciclo de atividades, melhorias relacionadas com o produto de ERP, o SACI, e os alinhamentos de negócios alavancados pela empresa e pela Divisão de Bancos de Dados e Segurança da Informação, parceira Sun Microsystems.

O evento foi um sucesso!

Server Logs
Sabemos que o MySQL na versão 5.0 já possuia muitos recursos interessantes com relação aos logs de eventos decorrentes no servidor que podem ser utilizados, tais como log para consultas lentas incluindo consultas que não utilizam índices, consultas envolvendo declarações administrativas ANALYZE, CHECK e OPTIMIZE TABLE que de certa maneira são também lentas na sua execução, o log geral ou general log que armazena informação de startup e shutdown do servidor, assim como todas consultas e comandos enviados e o log de erros (error log) que armazena informações sobre erros críticos do servidor durate seu funcionamento.
 
A parte inconveniente da configuração dos logs é a questão de ter que reiniciar o servidor de bancos de dados MySQL, retirando a possibilidade de novas conexões ou até "derrubando" as ativas - que podem ter suas threads reutilizadas ou não (ERROR 2006 (HY000): MySQL server has gone away) - após a edição do arquivo de configuração, my.ini ou my.cnf.
 
Geralmente, em uma instalação padrão do MySQL 5.0, o arquivo de opções/configurações já traz as opções de configuração de logs escritas, bastando somente retirar o caracter de comentário na linha, que é o # (cerquilha ou tralha). Após isto, é reiniciado o servidor de bancos de dados MySQL e este, quando "startado", cria os arquivo de logs no DATADIR - diretório de dados.
 
mysql> show variables like 'log%'\G
*************************** 1. row ***************************
Variable_name: log
Value: OFF
1 row in set (0.00 sec)
 
Acima, o retorno da consulta sobre as variáveis de ambiente, filtrando pela string log nos relata que os logs estão devidamente configurados. Outras linhas, logs ou variáveis podem ser exibidas para mostrar todas as configurações, como os logs de replicação e os logs do Storage Engine InnoDB com as suas respectivas configurações.Devemos dar atenção somente às variáveis log e slow_query_log neste momento.
 
Já nas versões do MySQL 5.1, encontramos algumas modificações que tornam mais dinâmicas a utilização dos logs, sua habilitação e melhoria de leitura destes. A partir da versão 5.1.6, o servidor de bancos de dados MySQL passa a prover um controle mais flexível com relação ao destino de armazenamento de entrada de logs de consultas lentas e do log geral, respectivamente log_slow_queries e log. O conteúdo que era escrito na versão anterior somente em arquivos, agora poderá ser escrito em tabelas, localizadas no banco de dados mysql e estas podem ser lidas obviamente com comandos SELECT.
 
Para verificar como são as tabelas general_log e slow_log, entre com as seguintes consultas:
SHOW CREATE TABLE mysql.general_log;
SHOW CREATE TABLE mysql.slow_log;
 
Para controlar se os logs serão escritos em arquivos ou em tabelas, o MySQL 5.1 - da versão 5.1.6 em diante - apresenta uma nova variável de ambiente, --log-output, que pode ser configurada no startup do servidor de modo standalone, em tempo de execução pode ser uma variável global ou ainda configurada no arquivo de opções no agrupamento [mysqld]. Tal variável aceita três valores:
 
  • TABLE: para gravar os logs nas tabelas general_log e slow_queries do banco de dados mysql;
  • FILE: o valor default (padrão). Este valor encaminha os logs para arquivos escritos de maneira sequencial;
  • NONE: desabilita os logs;
Vale salientar que ambos os valores, TABLE e FILE poderão ser fornecidos para a configuração do direcionamento de escritas dos logs general log e slow query log.
 
Atribuindo valores à variável de ambiente log-output:
mysql> -- desligando os logs
mysql> set global log_output ='NONE';
Query OK, 0 rows affected (0.00 sec)
 
mysql> -- logs direcionados somente para arquivos
mysql> set global log_output ='FILE';
Query OK, 0 rows affected (0.00 sec)
 
mysql> -- logs direcionados somente para tabela
mysql> set global log_output ='TABLE';
Query OK, 0 rows affected (0.00 sec)
 
mysql> -- logs direcionados para tabela e arquivo
mysql> set global log_output ='TABLE,FILE';
Query OK, 0 rows affected (0.00 sec)
 
Uma vantagem clara de se ter os logs sendo gravados em tabelas é a possibilidade de analisar tais entradas como registros, utilizando a linguagem SQL e todo o seu recurso, o que passa a ser um trabalho bem mais simples que abrir uma arquivo que geralmente é bastante grande, e ter que interpretar todo aquele conteúdo.
 
mysql> select * from mysql.general_log;
mysql> select * from mysql.slow_log;
 
Uma desvantagem que é claramente percebida é que, já que o general log armazenará todos os comandos enviados, estes sendo executados ou não e também os startup e shutdown do servidor de bancos de dados, é o overhead ou excesso de acesso ao disco. A performance poderá cair consideravelmente com a habilitação da gravação dos logs em tabelas, tanto para o general log quanto para o slow query log.
 
Outra novidade e a mais interessante de todas é que, caso os logs general_log e slow_query_log estiverem desabilitados em seu servidor de bancos de dados MySQL, você não precisará mais parar o MySQL para então habilitar os logs. Basta efetuar as operações em tempo de execução, como o exemplo a seguir:
 
Logs desabilitados:
mysql> show variables like 'log%'\G
*************************** 1. row ***************************
Variable_name: log
Value: OFF
1 row in set (0.00 sec)
 
mysql> show variables like 'slow_query_log'\G
*************************** 1. row ***************************
Variable_name: slow_query_log
Value: OFF
1 row in set (0.00 sec)
 
Acima podemos vemos que os logs general_log e slow_query_log estão desabilitados e a opção log_output está configurada com o valor padrão (FILE). Sem parar o servidor podemos habilitar os logs, já que as variáveis log e log_slow_queries são globais.
 
Habilitando os logs em tempo de execução (sem parar o servidor):
mysql> set global general_log=1;
Query OK, 0 rows affected (0.03 sec)
 
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.09 sec)
 
Neste momento, se listarmos os logs novamente com o comando SHOW VARIABLES, estes estarão habilitados e como são variáveis globais, todas as novas conexões e aquelas ativas no servidor já utilizarão as novas configurações.
 
Logs habilitados:
mysql> show variables like 'log%'\G
*************************** 1. row ***************************
Variable_name: log
Value: ON
1 row in set (0.00 sec)
 
mysql> show variables like 'slow_query_log'\G
*************************** 1. row ***************************
Variable_name: slow_query_log
Value: ON
1 row in set (0.00 sec)
 
Habilitando os logs de forma global, o administrador de bancos de dados terá que habilitá-los após cada restart do servidor, portanto, todas as variáveis que tej seu valor setado de forma global, tem seus valores resetados após cada restart.
 
Para tornar os logs permanentes, habilite-os através do arquivos de opções.
 
Outras variáveis de ambiente também foram adicionadas para controlar os logs por sessão, tornando mais flexível ainda a utilização dos logs. As novas variáveis são:
 
mysql> show variables like 'sql_log_%'\G
*************************** 1. row ***************************
Variable_name: sql_log_bin
Value: ON
*************************** 2. row ***************************
Variable_name: sql_log_off
Value: OFF
*************************** 3. row ***************************
Variable_name: sql_log_update
Value: ON
3 rows in set (0.00 sec)
 
A variável sql_log_bin é utilizada em sessões de usuários que geralmente são administrador de bancos de dados MySQL. Quando é necessário realizar operações de atualização que não devem ser escritas no log binário para impedir que sejam replicadas ou mesmo escritas neste log, o administrador poderá desabilitar momentâneamente a escrita de comandos que alteram o estado do banco de dados. Os valores possíveis são 0 para OFF e 1 para ON. Para que o valor desta variável possa ser alterado, é necessário o privilégio SUPER.
 
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
 
A variável sql_log_off é uma nova variável de ambiente para controlar a escrita de consultas em sessões de usuários conectados. Você poderá iniciar uma sessão e tornar os seus comandos particulares, inibindo que estes sejam escritos no general log. Será necessário que o usuário tenha o privilégio SUPER para efetuar tal operação. Os valores possíveis para esta a variável sql_log_off são 0 para OFF e 1 para ON.
 
mysql> set sql_log_off=0;
Query OK, 0 rows affected (0.00 sec)
 
Obs.: Assim como o termo table_type se tornou obsoleto da versão 4.1 para a versão 5.0, o termo log_slow_queries também sofreu um upgrade quando se trabalha com o mesmo na sessão, já no MySQL 5.1. Veja abaixo:
 
mysql> set global log_slow_queries=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
mysql> show warnings;
The syntax '@@log_slow_queries' is deprecated and will be removed in MySQL 7.0. Please use '@@slow_query_log' instead
 
Fontes:
  • Manual On-line MySQL 5.0: http://dev.mysql.com/doc/refman/5.0/en/server-logs.html
  • Manual On-line MySQL 5.1: http://dev.mysql.com/doc/refman/5.1/en/server-logs.htm
Após cobertos todos os requisitos, com instrutores certificados e aprovados quantos aos principais requisitos, hoje a EAC Software é um parceiro Sun Microsystems, denominado AMEC - Advanced MySQL Education Center, pronto para fornecer treinamentos oficiais à todo profissional que desejar obter expertise em servidores de bancos de dados MySQL, com foco na formação de competências e habilidades necessárias para enfrentar o dia-a-dia como um administrador de bancos de dados ou mesmo um desenvolvedor de aplicativos que utilizam o MySQL como o software de armazenamento de dados. Os treinamentos oficiais que oferecemos são:
  • MySQL For Beginners: treinamento para profissioanis iniciantes no servidor de bancos de dados MySQL;
  • MySQL For Developers: treinamento para profissionais que desejam formar habilidades voltadas para o desenvolvimento de consultas complexas e programas armazenados no servidor de bancos de dados (Triggers, Views, Functions, Cursors e Stored Procedures);
  • MySQL For Database Administrator: treinamento para profissionais que desejam formar competências e habilidades para administrar os recursos do servidor de bancos de dados MySQL, focado seu funcionamento, arquitetura, escalabilidade e alta-disponibilidade;
  • MySQL Performance Tuning: treinamento que coloca o aluno de frente com os problemas relacionados com o desempenho do servidor de bancos de dados MySQL, nossa maior demanda por consultorias nos últimos anos.
Entre em contato conosco e solicite o calendário completo de treinamentos sobre o servidor de bancos de dados Open Source mais utilizado em todo o mundo, contando com mais 77 milhões de instalações e cerca de 70 milhões de downloads diários através do mysql.com. Acompanhe os comunicados e informativos da EAC Software e saiba as novidades do mundo MySQL. Cordialmente,Wagner Bianchi - Sun Microsystems Official MySQL Instructor

 
Wagner Bianchi é tecnólogo em Gerenciamento de Banco de Dados com ênfase em Sistemas de Informação e cursa MBA em Administração de Empresas pela Fundação Getúlio Vargas - FGV. É consultor em banco de dados, especialista em MySQL, com foco em performance tunning e alta-disponibilidade pela empresa EAC Software. É também analista de sistemas em projetos da UFMG/ICEX, onde participa do desenvolvimento de produtos voltados para a área da Gestão da Informação/Conhecimento e testes de performance de SGBDs, além de participar de pesquisas relacionadas com tráfego de dados sobre o OpenSSL. Possui certificações Sun MySQL Certified Associate, Sun MySQL 5.0 Developer (SCMDEV I e II), Sun MySQL 5.0 Database Administrator (SCMDBA I e II) e MCDBA (Microsoft Certified Database Administrator).
 
Objetivos deste Blog
Este blog é destinado à publicar os recursos relacionado com design, melhor utilização de índices, linguagem SQL para desenvolvimento de relatórios com o QSQL, escalabilidade, monitoramento e outras necessidades que o servidor de bancos de dados MySQL tem para que possa trabalhar mais rapidamente, atendendo melhor aos seus negócios, com a velocidade que o usuário necessita.
 

Tags

Archive

Seg Ter Qua Qui Sex Sab Dom
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30