Iniciando o MySQL no Linux

Ola pessoal!

Bem, acredito que não existe segredo para iniciar o serviço do MySQL, certo? Segue algumas formas:

/etc/init.d/mysql start
service mysql start

Mas e após este inicio através da linha de comando, o que acontece? O que ocorre por trás da interface/servidor MySQL? Bem, vamos lá.

O inicio do servidor MySQL segue a lógica abaixo:

mysql.server –> mysqld_safe –> mysqld

– – mysql.server -> Um script encapsulador em torno do serviço MySQL , que é chamado em diretórios a nível de execução do System V, como o Linux e Oracle Solaris.

Confuso? Ta ai um exemplo:

‘/etc/init.d/mysql start’

Ao executar esta linha de comando, será verificado o arquivo de inicialização do MySQL já padronizado de acordo a instalação, fazendo o start do serviço de forma automática.

Experimente abrir este script, ele vai mostrar todas as funções de acordo com o que é passado ao sistema (start , stop, reload).

Você também pode edita-lo, trazendo maiores informações ou argumentos necessários. Um exemplo é ao rodar um stop ou restart no serviço, seja apresentado no terminal o numero de conexões abertas com o servidor e uma confirmação para executar o restart.

– – mysqld_safe -> É o processo responsável por configurar os logs de erros do MySQL, e responsável por inciar e monitorar o mysqld no S.O. Caso o serviço mysqld seja finalizado de forma anormal, a monitoração do mysql_safe irá reinicia-lo.

– – mysqld: -> Processo responsável por depurar as funcionalidades do servidor  MySQL junto ao S.O, seja os arquivos físicos de cada tabela/base, alocação dinâmica de memória, mantendo o serviço em execução.

 

Entendo como funciona a ‘monitoração’ do mysqld_safe:

curserRepare, ao consultar os processos ativos do MySQL, o mysqld_safe é o 10029 e o mysqld o 10187. Ao encerrar o 10187 de maneira forçada ( kill -9 ), o processo do mysqld_safe permanece o mesmo e o mysqld já assume um novo 10235.

Ok, e como funciona apenas o kill sem passar algum parâmetro?  Isso já tem referencia do sinal que é enviado ao S.O a cada comando. Podemos matar esta questão observando os logs do mysql, gravados no ‘/var/log/mysqld.log’:

Quando é passado o kill -9 ‘serviço’, a monitoração do mysqld_safe entra em ação e vê que não existe nenhum processo do mysqld em execução, logo este é iniciado em seguida:

141113 17:45:20 mysqld_safe Number of processes running now: 0
141113 17:45:20 mysqld_safe mysqld restarted

141113 17:45:20 [Note] Plugin ‘FEDERATED’ is disabled.
141113 17:45:20 InnoDB: The InnoDB memory heap is disabled
141113 17:45:20 InnoDB: Mutexes and rw_locks use GCC atomic builtins
141113 17:45:20 InnoDB: Compressed tables use zlib 1.2.8
141113 17:45:20 InnoDB: Using Linux native AIO
141113 17:45:20 InnoDB: Initializing buffer pool, size = 128.0M
141113 17:45:20 InnoDB: Completed initialization of buffer pool

Já quando é passado apenas o kill ‘serviço’, o sinal entendido pelo S.O é de parar o serviço do MySQL, o que também pode ser observado no log do mysql:

141113 17:46:42 [Note] /usr/libexec/mysqld: Normal shutdown

141113 17:46:42 [Note] Event Scheduler: Purging the queue. 0 events
141113 17:46:42 InnoDB: Starting shutdown…
141113 17:46:43 InnoDB: Shutdown completed; log sequence number 1595675
141113 17:46:43 [Note] /usr/libexec/mysqld: Shutdown complete

É recomendado utilizar o kill -9 como ultimo recurso, como por exemplo o serviço do MySQL não responde (Pode se identificar isso através do strace -p processo). Motivo?

– Repare que ao utilizar o kill -9, o mysqld_safe faz o restart do mysqld e inicia o servidor.

– Utilizando apenas o kill ou stop, veja que o MySQL guarda a sequência de logs no momento de encerrar o serviço: ”Shutdown completed; log sequence number 1595675″.

É importante que o mysql tenha a sequência dos logs guardados, pois caso não tenha, da próxima vez que o servidor for iniciado, será feita uma leitura em todos os arquivos lógicos do InnoDB, o famoso crash recovery, onde dependendo da quantidade de bases/tabelas innodb em seu servidor, esse processo pode tomar muito tempo.

 

É isso ai pessoal.

Dúvidas, criticas ou sugestões? Fiquem a vontade, todo retorno é construtivo 😀

Jose Wilson

Deixe uma resposta